FastDFS实现文件上传下载的工具类详细步骤

举报
轻狂书生FS 发表于 2020/11/29 00:58:55 2020/11/29
【摘要】 前言 要了解FastDFS的工作流程 1、首先加入jar包 <dependency> <groupId>net.oschina.zcx7878</groupId> <artifactId>fastdfs-client-java</artifactId> <version>1.27.0.0<...

前言 要了解FastDFS的工作流程

1、首先加入jar包


      <dependency>
      <groupId>net.oschina.zcx7878</groupId>
      <artifactId>fastdfs-client-java</artifactId>
      <version>1.27.0.0</version>
      </dependency>
  
 

2、配置FastDFS基本信息:

     在项目的resource目录下面新建fdfs_client.conf配置文件,配置信息如下:


      connect_timeout = 60
      network_timeout = 60
      charset = UTF-8
      http.tracker_http_port = 8080
      tracker_server = 192.168.200.128:22122
  
 

3、封装文件的信息(FastDFSFile.java)


      public class FastDFSFile {
      //文件名字
      private String name;
      //文件内容
      private byte[] content;
      //文件扩展名
      private String ext;
      //文件MD5摘要值
      private String md5;
      //文件创建作者
      private String 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.author = author;
       }
      public FastDFSFile(String name, byte[] content, String ext) {
      super();
      this.name = name;
      this.content = content;
      this.ext = ext;
       }
      public String getName() {
      return name;
       }
      public void setName(String name) {
      this.name = name;
       }
      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 getMd5() {
      return md5;
       }
      public void setMd5(String md5) {
      this.md5 = md5;
       }
      public String getAuthor() {
      return author;
       }
      public void setAuthor(String author) {
      this.author = author;
       }
      }
  
 

4、编写文件操作的工具类(上传、下载和删除等等操作)


      import org.csource.common.NameValuePair;
      import org.csource.fastdfs.*;
      import org.slf4j.LoggerFactory;
      import org.springframework.core.io.ClassPathResource;
      import java.io.ByteArrayInputStream;
      import java.io.IOException;
      import java.io.InputStream;
      public class FastDFSClient {
      private static org.slf4j.Logger logger = LoggerFactory.getLogger(FastDFSClient.class);
       /***
       * 初始化加载FastDFS的TrackerServer配置
       */
      static {
      try {
       String filePath = new ClassPathResource("fdfs_client.conf").getFile().getAbsolutePath();
       ClientGlobal.init(filePath);
       } catch (Exception e) {
       logger.error("FastDFS Client Init Fail!",e);
       }
       }
      /***
       * 文件上传
       * @param file
       * @return 1.文件的组名 2.文件的路径信息
       */
      public static String[] upload(FastDFSFile file) {
      //获取文件的作者
       NameValuePair[] meta_list = new NameValuePair[1];
       meta_list[0] = new NameValuePair("author", file.getAuthor());
      //接收返回数据
       String[] uploadResults = null;
       StorageClient storageClient=null;
      try {
      //创建StorageClient客户端对象
       storageClient = getTrackerClient();
      /***
       * 文件上传
       * 1)文件字节数组
       * 2)文件扩展名
       * 3)文件作者
       */
       uploadResults = storageClient.upload_file(file.getContent(), file.getExt(), meta_list);
       } catch (Exception e) {
       logger.error("Exception when uploadind the file:" + file.getName(), e);
       }
      if (uploadResults == null && storageClient!=null) {
       logger.error("upload file fail, error code:" + storageClient.getErrorCode());
       }
      //获取组名
       String groupName = uploadResults[0];
      //获取文件存储路径
       String remoteFileName = uploadResults[1];
      return uploadResults;
       }
      /***
       * 获取文件信息
       * @param groupName:组名
       * @param remoteFileName:文件存储完整名
       * @return
       */
      public static FileInfo getFile(String groupName, String remoteFileName) {
      try {
       StorageClient storageClient = getTrackerClient();
      return storageClient.get_file_info(groupName, remoteFileName);
       } catch (Exception e) {
       logger.error("Exception: Get File from Fast DFS failed", e);
       }
      return null;
       }
      /***
       * 文件下载
       * @param groupName
       * @param remoteFileName
       * @return
       */
      public static InputStream downFile(String groupName, String remoteFileName) {
      try {
      //创建StorageClient
       StorageClient storageClient = getTrackerClient();
      //下载文件
      byte[] fileByte = storageClient.download_file(groupName, remoteFileName);
       InputStream ins = new ByteArrayInputStream(fileByte);
      return ins;
       } catch (Exception e) {
       logger.error("Exception: Get File from Fast DFS failed", e);
       }
      return null;
       }
      /***
       * 文件删除
       * @param groupName
       * @param remoteFileName
       * @throws Exception
       */
      public static void deleteFile(String groupName, String remoteFileName)
      throws Exception {
      //创建StorageClient
       StorageClient storageClient = getTrackerClient();
      //删除文件
      int i = storageClient.delete_file(groupName, remoteFileName);
       }
      /***
       * 获取Storage组
       * @param groupName
       * @return
       * @throws IOException
       */
      public static StorageServer[] getStoreStorages(String groupName)
      throws IOException {
      //创建TrackerClient
       TrackerClient trackerClient = new TrackerClient();
      //获取TrackerServer
       TrackerServer trackerServer = trackerClient.getConnection();
      //获取Storage组
      return trackerClient.getStoreStorages(trackerServer, groupName);
       }
      /***
       * 获取Storage信息,IP和端口
       * @param groupName
       * @param remoteFileName
       * @return
       * @throws IOException
       */
      public static ServerInfo[] getFetchStorages(String groupName,
       String remoteFileName) throws IOException {
       TrackerClient trackerClient = new TrackerClient();
       TrackerServer trackerServer = trackerClient.getConnection();
      return trackerClient.getFetchStorages(trackerServer, groupName, remoteFileName);
       }
      /***
       * 获取Tracker服务地址
       * @return
       * @throws IOException
       */
      public static String getTrackerUrl() throws IOException {
      return "http://"+getTrackerServer().getInetSocketAddress().getHostString()+":"+ClientGlobal.getG_tracker_http_port()+"/";
       }
      /***
       * 获取Storage客户端
       * @return
       * @throws IOException
       */
      private static StorageClient getTrackerClient() throws IOException {
       TrackerServer trackerServer = getTrackerServer();
       StorageClient storageClient = new StorageClient(trackerServer, null);
      return  storageClient;
       }
      /***
       * 获取Tracker
       * @return
       * @throws IOException
       */
      private static TrackerServer getTrackerServer() throws IOException {
       TrackerClient trackerClient = new TrackerClient();
       TrackerServer trackerServer = trackerClient.getConnection();
      return  trackerServer;
       }
      }
  
 

 

文章来源: blog.csdn.net,作者:LookForDream_,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/LookForDream_/article/details/104521309

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。