前言 要了解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,作者:轻狂书生FS,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/LookForDream_/article/details/104521309