Java实现FastDFS文件上传下载和删除

Posted yuwenS.

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java实现FastDFS文件上传下载和删除相关的知识,希望对你有一定的参考价值。

FastDFS基于Java对文件进行上传、下载和删除

前期准备

  1. 需要下载FastDFS的官方源代码https://codeload.github.com/happyfish100/fastdfs-client-java/zip/master到本地。
  2. 下载成功后将源代码打包成jar包放入Maven仓库
  3. 服务器有FastDFS环境并且已经启动
  4. 如果像要在外部浏览器上访问到传文件的内容,需要在服务器中配置FastDFS提供的一个Nginx扩展模块

具体实现

  1. 新建一个Maven工程在pom.xml文件导入FastDFS源码编译成的jar包
		<dependency>
            <groupId>org.csource</groupId>
            <artifactId>fastdfs-client-java</artifactId>
            <version>1.27-SNAPSHOT</version>
        </dependency>
  1. 在resources文件下新建fastdfs.conf文件并编写
tracker_server=服务器地址:22122 //表示tracker的地址和端口如果是集群有多个就继续往下写
  1. 文件上传(upload)代码具体实现
 //文件上传
    private static void upload() {
        TrackerServer ts = null;
        StorageServer ss = null;
        try {
            //读取FsatDFS的配置文件用于将所有的tracker的地址读取到内存中
            ClientGlobal.init("fastdfs.conf");
            TrackerClient tc = new TrackerClient();
            ts = tc.getConnection();
            ss = tc.getStoreStorage(ts);
            //定义storage的客户端对象,需要使用这个对象来完成具体文件上传 下载和删除
            StorageClient sc = new StorageClient(ts,ss);
            //文件上传
            //参数一 需要上传的文件的绝对路径
            //参数二 为需要上传的文件的扩展名
            //参数三 为文件的属性文件通常不上传
            //返回一个String数组 这个数据对我们非常重要,建议存入数据库
            //返回值,一个是组名,一个是上传文件存储在的目录
            String[] result = sc.upload_appender_file("d:/a.jpg","jpg",null);
            for (String str:result) {
                System.out.println(str);
            }
        } catch (IOException | MyException e) {
            e.printStackTrace();
        } finally {
           if (ss != null){
               try {
                   ss.close();
               } catch (IOException e) {
                   e.printStackTrace();
               }
           }
           if (ts != null){
               try {
                   ts.close();
               } catch (IOException e) {
                   e.printStackTrace();
               }
           }
        }
    }
  1. 文件下载(download)的具体实现
 //文件下载
    private static void download() {
        TrackerServer ts = null;
        StorageServer ss = null;
        try {
            //读取FsatDFS的配置文件用于将所有的tracker的地址读取到内存中
            ClientGlobal.init("fastdfs.conf");
            TrackerClient tc = new TrackerClient();
            ts = tc.getConnection();
            ss = tc.getStoreStorage(ts);
            //定义storage的客户端对象,需要使用这个对象来完成具体文件上传 下载和删除
            StorageClient sc = new StorageClient(ts,ss);
            //文件下载
            //参数一 需要下载的文件的组名
            //参数二 需要下载文件的远程文件名
            //参数三 需要保存到本地的文件名称
            //返回一个int类型的数据,返回0表示文件下载成功其它值表示文件下载失败
            String groupName = "group1";
            String remoteName = "M00/00/00/sBRcHmDIlLCEDtsjAAAAAE_bs3A176.png";
            String localFileName = "d:/download.png";
            int i = sc.download_file(groupName, remoteName,localFileName);
            System.out.println(i);
        } catch (IOException | MyException e) {
            e.printStackTrace();
        } finally {
            if (ss != null){
                try {
                    ss.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (ts != null){
                try {
                    ts.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
  1. 文件删除(delete)的具体实现
 private static void delete() {
        TrackerServer ts = null;
        StorageServer ss = null;
        try {
            //读取FsatDFS的配置文件用于将所有的tracker的地址读取到内存中
            ClientGlobal.init("fastdfs.conf");
            TrackerClient tc = new TrackerClient();
            ts = tc.getConnection();
            ss = tc.getStoreStorage(ts);
            //定义storage的客户端对象,需要使用这个对象来完成具体文件上传 下载和删除
            StorageClient sc = new StorageClient(ts,ss);
            //文件下载
            //参数一 需要删除的文件的组名
            //参数二 需要删除文件的远程文件名
            //返回一个int类型的数据,返回0表示文件删除成功其它值表示文件删除失败
            String groupName = "group1";
            String remoteName = "M00/00/00/sBRcHmDIlLCEDtsjAAAAAE_bs3A176.png";
            int i = sc.delete_file(groupName,remoteName);
            System.out.println(i);
        } catch (IOException | MyException e) {
            e.printStackTrace();
        } finally {
            if (ss != null){
                try {
                    ss.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (ts != null){
                try {
                    ts.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

测试

文件上传测试结果

上传文件

在外部浏览器访问这个文件通过组名和位置访问
访问图片

测试下载

文件下载
返回0表示下载成功

测试删除

文件删除
返回0表示删除成功

以上是关于Java实现FastDFS文件上传下载和删除的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot整合FastDFS实现文件的上传下载和删除

SpringBoot整合FastDFS实现文件的上传下载和删除

Java客户端操作FastDFS实现文件上传下载替换删除

django中使用FastDFS分布式文件系统接口代码实现文件上传下载更新删除

fastdfs分布式文件系统之与dubbo整合实现分布式服务接口

fastdfs在java中上传和查看没问题,Java调用删除的时候报错:2,错误信息:找不到节点或文件。求大神解决