• fastdfs使用


    一、创建一个maven的webproject,叫file-manager:mvnarchetype:create-DgroupId=platform.activity.filemanager-DartifactId=file-manager-DarchetypeArtifactId=maven-archetype-webapp

    二、定义一个fastDFS的客户端文件fdfs_client.conf:

    class="properties" name="code">connect_timeout = 2
    network_timeout = 30
    charset = UTF-8
    http.tracker_http_port = 8080
    http.anti_steal_token = no
    http.secret_key = FastDFS1234567890
    
    tracker_server = 192.168.1.156:22122
    #tracker_server = 192.168.1.188:22122
    
    #storage_server = 192.168.1.155:23000 #no need here

    三、定义一个配置接口:

    package com.chuanliu.platform.activity.fm.manager;
    import java.io.Serializable;
    public interface FileManagerConfig extends Serializable {
      public static final String FILE_DEFAULT_WIDTH     = "120";
      public static final String FILE_DEFAULT_HEIGHT     = "120";
      public static final String FILE_DEFAULT_AUTHOR     = "Diandi";
      public static final String PROTOCOL = "http://";
      public static final String SEPARATOR = "/";
      public static final String TRACKER_NGNIX_PORT     = "8080";
      public static final String CLIENT_CONFIG_FILE   = "fdfs_client.conf";  
    }

    四、封装一个FastDFS文件Bean

    package com.chuanliu.platform.activity.fm.manager;
    public class FastDFSFile implements FileManagerConfig {
      private static final long serialVersionUID = -996760121932438618L;
      private String name;
      private byte[] content;
      private String ext;
      private String height = FILE_DEFAULT_HEIGHT;
      private String width = FILE_DEFAULT_WIDTH;
      private String author = FILE_DEFAULT_AUTHOR;
      public FastDFSFile(String name, byte[] content, String ext, String height,String width, String author) {
        super();
        this.name = name;
        this.content = content;
        this.ext = ext;
        this.height = height;
        this.width = width;
        this.author = author;
      }
      public FastDFSFile(String name, byte[] content, String ext) {
        super();
        this.name = name;
        this.content = content;
        this.ext = ext;
      }
      public byte[] getContent() {
        return content;
      }
      public void setContent(byte[] content) {
        this.content = content;
      }
      public String getExt() {
        return ext;
      }
      public void setExt(String ext) {
        this.ext = ext;
      }
      public String getHeight() {
        return height;
      }
      public void setHeight(String height) {
        this.height = height;
      }
      public String getWidth() {
        return width;
      }
      public void setWidth(String width) {
        this.width = width;
      }
      public String getAuthor() {
        return author;
      }
      public void setAuthor(String author) {
        this.author = author;
      }
      public String getName() {
        return name;
      }
      public void setName(String name) {
        this.name = name;
      } 
    }

    五、定义核心的FileManager类,里面包含有上传、删除、获取文件的方法:

    package com.chuanliu.platform.activity.fm.manager;
    import java.io.File;
    import java.io.IOException;
    import org.apache.log4j.Logger;
    import org.csource.common.NameValuePair;
    import org.csource.fastdfs.ClientGlobal;
    import org.csource.fastdfs.FileInfo;
    import org.csource.fastdfs.ServerInfo;
    import org.csource.fastdfs.StorageClient;
    import org.csource.fastdfs.StorageServer;
    import org.csource.fastdfs.TrackerClient;
    import org.csource.fastdfs.TrackerServer;
    import com.chuanliu.platform.activity.basic.util.LoggerUtils;
    public class FileManager implements FileManagerConfig {
      private static final long serialVersionUID = 1L;
      private static Logger logger  = Logger.getLogger(FileManager.class);
      private static TrackerClient  trackerClient;
      private static TrackerServer  trackerServer;
      private static StorageServer  storageServer;
      private static StorageClient  storageClient;
      static { // Initialize Fast DFS Client configurations
        try {
          String classPath = new File(FileManager.class.getResource("/").getFile()).getCanonicalPath();
          String fdfsClientConfigFilePath = classPath + File.separator + CLIENT_CONFIG_FILE;
          logger.info("Fast DFS configuration file path:" + fdfsClientConfigFilePath);
          ClientGlobal.init(fdfsClientConfigFilePath);
          trackerClient = new TrackerClient();
          trackerServer = trackerClient.getConnection();
          storageClient = new StorageClient(trackerServer, storageServer);
        } catch (Exception e) {
          LoggerUtils.error(logger,  e);  
        }
      }
        
      public static String upload(FastDFSFile file) {
        LoggerUtils.info(logger, "File Name: " + file.getName() + "File Length: " + file.getContent().length);
        NameValuePair[] meta_list = new NameValuePair[3];
          meta_list[0] = new NameValuePair("width", "120");
          meta_list[1] = new NameValuePair("heigth", "120");
          meta_list[2] = new NameValuePair("author", "Diandi");
          long startTime = System.currentTimeMillis();
        String[] uploadResults = null;
        try {
          uploadResults = storageClient.upload_file(file.getContent(), file.getExt(), meta_list);
        } catch (IOException e) {
          logger.error("IO Exception when uploadind the file: " + file.getName(), e);
        } catch (Exception e) {
          logger.error("Non IO Exception when uploadind the file: " + file.getName(), e);
        }
        logger.info("upload_file time used: " + (System.currentTimeMillis() - startTime) + " ms");
        
        if (uploadResults == null) {
          LoggerUtils.error(logger, "upload file fail, error code: " + storageClient.getErrorCode());
        }
        
        String groupName         = uploadResults[0];
        String remoteFileName   = uploadResults[1];
        
        String fileAbsolutePath = PROTOCOL + trackerServer.getInetSocketAddress().getHostName() 
            + SEPARATOR
            + TRACKER_NGNIX_PORT
            + SEPARATOR 
            + groupName 
            + SEPARATOR 
            + remoteFileName;
        LoggerUtils.info(logger, "upload file successfully!!!  " +"group_name: " + groupName + ", remoteFileName:"
            + " " + remoteFileName);
        return fileAbsolutePath;
      }
      
      public static FileInfo getFile(String groupName, String remoteFileName) {
        try {
          return storageClient.get_file_info(groupName, remoteFileName);
        } catch (IOException e) {
          logger.error("IO Exception: Get File from Fast DFS failed", e);
        } catch (Exception e) {
          logger.error("Non IO Exception: Get File from Fast DFS failed", e);
        }
        return null;
      }
      
      public static void deleteFile(String groupName, String remoteFileName) throws Exception {
        storageClient.delete_file(groupName, remoteFileName);
      }
      
      public static StorageServer[] getStoreStorages(String groupName) throws IOException {
        return trackerClient.getStoreStorages(trackerServer, groupName);
      }
      
      public static ServerInfo[] getFetchStorages(String groupName, String remoteFileName) throws IOException {
        return trackerClient.getFetchStorages(trackerServer, groupName, remoteFileName);
      }
    }
     

    六、Unit Test测试类

    package manager;
    import java.io.File;
    import java.io.FileInputStream;
    
    import org.csource.fastdfs.FileInfo;
    import org.csource.fastdfs.ServerInfo;
    import org.csource.fastdfs.StorageServer;
    import org.junit.Test;
    import org.springframework.util.Assert;
    
    import com.chuanliu.platform.activity.fm.manager.FastDFSFile;
    import com.chuanliu.platform.activity.fm.manager.FileManager;
    
    /**
     * @author Josh Wang(Sheng)
     *
     * @email  josh_wang23@hotmail.com
     */
    public class TestFileManager {
    
      @Test
      public void upload() throws Exception {
        File content = new File("C:\520.jpg");
        
        FileInputStream fis = new FileInputStream(content);
          byte[] file_buff = null;
          if (fis != null) {
              int len = fis.available();
              file_buff = new byte[len];
              fis.read(file_buff);
          }
        
        FastDFSFile file = new FastDFSFile("520", file_buff, "jpg");
        
        String fileAbsolutePath = FileManager.upload(file);
        System.out.println(fileAbsolutePath);
        fis.close();
      }
      
      @Test
      public void getFile() throws Exception {
        FileInfo file = FileManager.getFile("group1", "M00/00/00/wKgBm1N1-CiANRLmAABygPyzdlw073.jpg");
        Assert.notNull(file);
        String sourceIpAddr = file.getSourceIpAddr();
          long size = file.getFileSize();
          System.out.println("ip:" + sourceIpAddr + ",size:" + size);
      }
      
      @Test
      public void getStorageServer() throws Exception {
        StorageServer[] ss = FileManager.getStoreStorages("group1");
        Assert.notNull(ss);
        for (int k = 0; k < ss.length; k++){
          System.err.println(k + 1 + ". " + ss[k].getInetSocketAddress().getAddress().getHostAddress() + ":" + ss[k].getInetSocketAddress().getPort());
          }
      }
      @Test
      public void getFetchStorages() throws Exception {
        ServerInfo[] servers = FileManager.getFetchStorages("group1", "M00/00/00/wKgBm1N1-CiANRLmAABygPyzdlw073.jpg");
        Assert.notNull(servers);
        for (int k = 0; k < servers.length; k++) {
                System.err.println(k + 1 + ". " + servers[k].getIpAddr() + ":" + servers[k].getPort());
            }
      }
    }
  • 相关阅读:
    HDU 5521 Meeting
    HDU 5170 GTY's math problem
    HDU 5531 Rebuild
    HDU 5534 Partial Tree
    HDU 4101 Ali and Baba
    HDU 5522 Numbers
    HDU 5523 Game
    ZUFE OJ 2301 GW I (3)
    POJ 2398 Toy Storage
    POJ 2318 TOYS
  • 原文地址:https://www.cnblogs.com/go4mi/p/5809541.html
Copyright © 2020-2023  润新知