java fastdfs_java 实现FastDFS文件操作

java 实现FastDFS 文件操作

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

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

d1f53efe5d4e

fastDFS java项目截图

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

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

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

d1f53efe5d4e

依赖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工具类中集合了支持字节数组的上传入参。


版权声明:本文为weixin_35406877原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。