首页 > 代码库 > fastdfs使用

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 = 2network_timeout = 30charset = UTF-8http.tracker_http_port = 8080http.anti_steal_token = nohttp.secret_key = FastDFS1234567890tracker_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());        }  }}

 

fastdfs使用