java 实现FastDFS文件操作

java 实现FastDFS 文件操作

1.下载FastClient并实现依赖Jar安装

访问余大github项目 地址为fastdfs-client-java下载后导入Idea,修改项目Java编译版本,如图所示:

fastDFS java项目截图

使用Maven进行 编译和构建,dos窗口定位到该项目路径下,进行编译和构建

 E:\fastdfs-client-java-master>mvn clean install

构建成功后,会在maven 本地仓库出现相关Jar包,如图所示:


依赖Jar构建成功

在需要进行文件操作的项目模块增加Pom文件依赖配置,配置内容如下:

    
            
                org.csource
                fastdfs-client-java
                1.27
            

2.增加FastDFS连接配置文件

在需要的项目模块资源配置文件夹下 src/resource 目录下新增配置文件 fdfs_client.properties
配置内容具体如下:

connect_timeout = 2
network_timeout = 30
charset = UTF-8
http.tracker_http_port = 8088   # tracker Http端口
http.anti_steal_token = no      # 暂无作用
http.secret_key = FastDFS1234567890     # 暂无作用
tracker_server = 192.168.43.60:22122    # tracker Server地址信息

3.编写FastClient 工具类,用于封装文件操作

package com.gsww.ctyxy.util;
import org.csource.common.MyException;
import org.csource.common.NameValuePair;
import org.csource.fastdfs.*;
import java.io.BufferedOutputStream;
import java.io.IOException;
import java.net.URLDecoder;

/**
 * FastDFS工具类【实现文件上传、下载、删除、查询】
 * @author Zhangyongliang
 */
public class FastDFSClient {

    private  TrackerClient trackerClient = null;
    private  TrackerServer trackerServer = null;
    private  StorageServer storageServer = null;
    private  StorageClient1 storageClient = null;

    public FastDFSClient(String conf) throws Exception {
        if (conf.contains("classpath:")) {
            String path = URLDecoder.decode(getClass().getProtectionDomain().getCodeSource().getLocation().toString(),"UTF-8");
            path=path.substring(6);
            conf = conf.replace("classpath:",URLDecoder.decode(path,"UTF-8"));
        }
        ClientGlobal.init(conf);
        trackerClient = new TrackerClient();
        trackerServer = trackerClient.getConnection();
        storageServer = null;
        storageClient = new StorageClient1(trackerServer, storageServer);
    }

    /**
     * 上传文件方法
     * 

Title: uploadFile

*

Description:

* @param fileName 文件全路径 * @param extName 文件扩展名,不包含(.) * @param metas 文件扩展信息 * @return * @throws Exception */ public String uploadFile(String fileName, String extName, NameValuePair[] metas) { String result=null; try { result = storageClient.upload_file1(fileName, extName, metas); } catch (IOException e) { e.printStackTrace(); } catch (MyException e) { e.printStackTrace(); } return result; } /** * 上传文件,传fileName * @param fileName 文件的磁盘路径名称 如:D:/image/aaa.jpg * @return null为失败 */ public String uploadFile(String fileName) { return uploadFile(fileName, null, null); } /** * * @param fileName 文件的磁盘路径名称 如:D:/image/aaa.jpg * @param extName 文件的扩展名 如 txt jpg等 * @return null为失败 */ public String uploadFile(String fileName, String extName) { return uploadFile(fileName, extName, null); } /** * 上传文件方法 *

Title: uploadFile

*

Description:

* @param fileContent 文件的内容,字节数组 * @param extName 文件扩展名 * @param metas 文件扩展信息 * @return * @throws Exception */ public String uploadFile(byte[] fileContent, String extName, NameValuePair[] metas) { String result=null; try { result = storageClient.upload_file1(fileContent, extName, metas); } catch (IOException e) { e.printStackTrace(); } catch (MyException e) { e.printStackTrace(); } return result; } /** * 上传文件 * @param fileContent 文件的字节数组 * @return null为失败 * @throws Exception */ public String uploadFile(byte[] fileContent) throws Exception { return uploadFile(fileContent, null, null); } /** * 上传文件 * @param fileContent 文件的字节数组 * @param extName 文件的扩展名 如 txt jpg png 等 * @return null为失败 */ public String uploadFile(byte[] fileContent, String extName) { return uploadFile(fileContent, extName, null); } /** * 文件下载到磁盘 * @param path 图片路径 * @param output 输出流 中包含要输出到磁盘的路径 * @return -1失败,0成功 */ public int download_file(String path,BufferedOutputStream output) { int result=-1; try { byte[] b = storageClient.download_file1(path); try{ if(b != null){ output.write(b); result=0; } }catch (Exception e){} //用户可能取消了下载 finally { if (output != null){ try { output.close(); } catch (IOException e) { e.printStackTrace(); } } } } catch (Exception e) { e.printStackTrace(); } return result; } /** * 获取文件数组 * @param path 文件的路径 如group1/M00/00/00/wKgRsVjtwpSAXGwkAAAweEAzRjw471.jpg * @return */ public byte[] download_bytes(String path) { byte[] b=null; try { b = storageClient.download_file1(path); } catch (IOException e) { e.printStackTrace(); } catch (MyException e) { e.printStackTrace(); } return b; } /** * 删除文件 * @param group 组名 如:group1 * @param storagePath 不带组名的路径名称 如:M00/00/00/wKgRsVjtwpSAXGwkAAAweEAzRjw471.jpg * @return -1失败,0成功 */ public Integer delete_file(String group ,String storagePath){ int result=-1; try { result = storageClient.delete_file(group, storagePath); } catch (IOException e) { e.printStackTrace(); } catch (MyException e) { e.printStackTrace(); } return result; } /** * * @param storagePath 文件的全部路径 如:group1/M00/00/00/wKgRsVjtwpSAXGwkAAAweEAzRjw471.jpg * @return -1失败,0成功 * @throws IOException * @throws Exception */ public Integer delete_file(String storagePath){ int result=-1; try { result = storageClient.delete_file1(storagePath); } catch (IOException e) { e.printStackTrace(); } catch (MyException e) { e.printStackTrace(); } return result; } /** * 获取远程服务器文件资源信息 * @param groupName 文件组名 如:group1 * @param remoteFileName M00/00/00/wKgRsVjtwpSAXGwkAAAweEAzRjw471.jpg * @return */ public FileInfo getFile(String groupName,String remoteFileName){ try { return storageClient.get_file_info(groupName, remoteFileName); } catch (Exception e) { e.printStackTrace(); } return null; } }

4.文件操作

在web 项目Controller层进行文件的操作

上传文件

    @RequestMapping(value = "file/uploadFast",method = RequestMethod.GET)
    public void uploadFast(HttpServletRequest request)throws Exception{
        // 1、把FastDFS提供的jar包添加到工程中
        // 2、初始化全局配置。加载一个配置文件。
        String confUrl=this.getClass().getClassLoader().getResource("/fdfs_client.properties").getPath();
        FastDFSClient fastDFSClient=new FastDFSClient(confUrl);
        //上传文件
       String  filePath= fastDFSClient.uploadFile("F:\\Photos\\P70602-192547.jpg");
      System.out.println("返回路径:"+filePath);
      //省略其他

删除文件

//删除文件
    int flag=fastDFSClient.delete_file("group1/M00/00/00/wKgrPFpf94KASn3vAAsC7gailiI018.jpg");
    System.out.println("删除结果:" +(flag==0?"删除成功":"删除失败"));

下载文件到桌面

//下载文件到用户桌面位置
    FileSystemView fsv = FileSystemView.getFileSystemView();
    File com=fsv.getHomeDirectory(); //读取桌面路径
    int downFlag=fastDFSClient.download_file("group1/M00/00/00/wKgrPFpe9OqAWsHxAAH5yvc2jn8251.jpg",new BufferedOutputStream(new FileOutputStream(com.getPath()+"\\aa.jpg")));
    System.out.println("下载结果为:" +(downFlag==0?"下载文件成功":"下载文件失败"));

查询文件信息

//获取文件信息
    FileInfo  file=fastDFSClient.getFile("group1","M00/00/00/wKgrPFpe9OqAWsHxAAH5yvc2jn8251.jpg");
    System.out.println("获取文件信息成功:"+file.getFileSize());

说明:在FastDFS工具类中集合了支持字节数组的上传入参。

你可能感兴趣的:(java 实现FastDFS文件操作)