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实现文件上传下载替换删除

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

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

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