上传交互过程
-
- client询问tracker上传到的storage,不需要附加参数;
-
- tracker返回一台可用的storage;
-
- client直接和storage通讯完成文件上传。
下载交互过程
-
- client询问tracker下载文件的storage,参数为文件标识(卷名和文件名);
-
- tracker返回一台可用的storage;
-
- client直接和storage通讯完成文件下载。
- 需要说明的是,client为使用FastDFS服务的调用方,client也应该是一台服务器,它对tracker和storage的调用均为服务器间的调用。
java整合FastDFS
/**
* FastDFS 文件存取Utils
*/
public class FastDFSClient {
static {
//从classpath下获取文件对象获取路径
String path = new ClassPathResource("fdfs_client.conf").getPath();
try {
ClientGlobal.init(path);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 图片上传
*
* @param file
* @return
*/
public static String[] upload(FastDFSFile file) {
try {
TrackerClient trackerClient = new TrackerClient();
TrackerServer trackerServer = trackerClient.getConnection();
StorageClient storageClient = new StorageClient(trackerServer, null);
//参数1 字节数组
//参数2 扩展名(不带点)
//参数3 元数据( 文件的大小,文件的作者,文件的创建时间戳)
NameValuePair[] meta_list = new NameValuePair[]{new NameValuePair(file.getAuthor()), new NameValuePair(file.getName())};
String[] strings = storageClient.upload_file(file.getContent(), file.getExt(), meta_list);
// strings[0]==group1 strings[1]=M00/00/00/wKjThF1aW9CAOUJGAAClQrJOYvs424.jpg
return strings;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 图片下载
*
* @param groupName
* @param remoteFileName
* @return
*/
public static InputStream downFile(String groupName, String remoteFileName) {
ByteArrayInputStream byteArrayInputStream = null;
try {
//3.创建trackerclient对象
TrackerClient trackerClient = new TrackerClient();
//4.创建trackerserver 对象
TrackerServer trackerServer = trackerClient.getConnection();
//5.创建stroageserver 对象
//6.创建storageclient 对象
StorageClient storageClient = new StorageClient(trackerServer, null);
//7.根据组名 和 文件名 下载图片
//参数1:指定组名
//参数2 :指定远程的文件名
byte[] bytes = storageClient.download_file(groupName, remoteFileName);
byteArrayInputStream = new ByteArrayInputStream(bytes);
return byteArrayInputStream;
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (byteArrayInputStream != null) {
byteArrayInputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
/**
* 图片删除
*
* @param groupName
* @param remoteFileName
*/
public static void deleteFile(String groupName, String remoteFileName) {
try {
//3.创建trackerclient对象
TrackerClient trackerClient = new TrackerClient();
//4.创建trackerserver 对象
TrackerServer trackerServer = trackerClient.getConnection();
//5.创建stroageserver 对象
//6.创建storageclient 对象
StorageClient storageClient = new StorageClient(trackerServer, null);
int i = storageClient.delete_file(groupName, remoteFileName);
if (i == 0) {
System.out.println("删除成功");
} else {
System.out.println("删除失败");
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 根据组名获取组的信息
*
* @param groupName
* @return
*/
public static StorageServer getStorages(String groupName) {
try {
TrackerClient trackerClient = new TrackerClient();
//4.创建trackerserver 对象
TrackerServer trackerServer = trackerClient.getConnection();
//参数1 指定traqckerserver 对象
//参数2 指定组名
StorageServer group1 = trackerClient.getStoreStorage(trackerServer, groupName);
return group1;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
/**
* 根据文件名和组名获取文件的信息
*
* @param groupName
* @param remoteFileName
* @return
*/
public static FileInfo getFile(String groupName, String remoteFileName) {
try {
TrackerClient trackerClient = new TrackerClient();
//4.创建trackerserver 对象
TrackerServer trackerServer = trackerClient.getConnection();
StorageClient storageClient = new StorageClient(trackerServer, null);
//参数1 指定组名
//参数2 指定文件的路径
FileInfo fileInfo = storageClient.get_file_info(groupName, remoteFileName);
return fileInfo;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 根据文件名和组名 获取组信息的数组信息
*
* @param groupName
* @param remoteFileName
* @return
*/
public static ServerInfo[] getServerInfo(String groupName, String remoteFileName) {
try {
//3.创建trackerclient对象
TrackerClient trackerClient = new TrackerClient();
//4.创建trackerserver 对象
TrackerServer trackerServer = trackerClient.getConnection();
ServerInfo[] group1s = trackerClient.getFetchStorages(trackerServer, groupName, remoteFileName);
return group1s;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
/**
* 获取tracker 的ip和端口的信息,
* http://192.168.211.132:8080
*
* @return
*/
public static String getTrackerUrl() {
try {
//3.创建trackerclient对象
TrackerClient trackerClient = new TrackerClient();
//4.创建trackerserver 对象
TrackerServer trackerServer = trackerClient.getConnection();
//tracker 的ip的信息
String hostString = trackerServer.getInetSocketAddress().getHostString();
//http://192.168.211.132:8080/group1/M00/00/00/wKjThF1aW9CAOUJGAAClQrJOYvs424.jpg img
int g_tracker_http_port = ClientGlobal.getG_tracker_http_port();
return "http://" + hostString + ":" + g_tracker_http_port;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
FastDFSFile
fdfs_client.conf
Original: https://www.cnblogs.com/dw3306/p/14562312.html
Author: 邓维-java
Title: 分布式文件存储–FastDFS
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/539174/
转载文章受原作者版权保护。转载请注明原作者出处!