首先引入相關jar包。pom檔案的相關依賴如下所示。
<dependencies>
<!--與fastdfsclient有關-->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.0.1</version>
</dependency>
<dependency>
<groupId>org.csource</groupId>
<artifactId>fastdfs-client-java</artifactId>
<version>1.27-SNAPSHOT</version>
</dependency>
</dependencies>
配置檔案client.conf如下所示
charset = UTF-8
http.secret_key = FastDFS1234567890
tracker_server=192.168.224.200:22122
tracker_server=192.168.224.201:22122
加載配置檔案:
// 初始化FastDFS Client,靜态代碼塊,隻加載一次
static {
try {
//ClientGlobal.init(CONFIG_FILENAME);
//clientGloble讀配置檔案
ClassPathResource resource = new ClassPathResource("client.conf");
ClientGlobal.init(resource.getClassLoader().getResource("client.conf").getPath());
TrackerClient trackerClient = new TrackerClient(ClientGlobal.g_tracker_group);
TrackerServer trackerServer = trackerClient.getConnection();
if (trackerServer == null) {
throw new IllegalStateException("getConnection return null");
}
StorageServer storageServer = trackerClient.getStoreStorage(trackerServer);
if (storageServer == null) {
throw new IllegalStateException("getStoreStorage return null");
}
storageClient1 = new StorageClient1(trackerServer,storageServer);
} catch (Exception e) {
e.printStackTrace();
}
}
上傳檔案:
public static String uploadFileByStream(FileInputStream fileInputStream, String fileName, Map<String,String> metaList) {
try {
//把file轉化成byte數組
byte[] buff = IOUtils.toByteArray(fileInputStream);
NameValuePair[] nameValuePairs = null;
if (metaList != null) {
nameValuePairs = new NameValuePair[metaList.size()];
int index = 0;
for (Iterator<Map.Entry<String,String>> iterator = metaList.entrySet().iterator(); iterator.hasNext();) {
Map.Entry<String,String> entry = iterator.next();
String name = entry.getKey();
String value = entry.getValue();
nameValuePairs[index++] = new NameValuePair(name,value);
}
}
return storageClient1.upload_file1(buff, fileName.substring(fileName.lastIndexOf(".") + 1),nameValuePairs);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static String uploadFileByStream(FileInputStream fileInputStream, String fileName) {
return uploadFileByStream(fileInputStream,fileName,null);
}
下載下傳(浏覽)檔案
1、内置WebServer
/**
* 把輸出流傳回給前端
* @param fileId 檔案ID(上傳檔案成功後傳回的ID)
* @return
*/
public static void downloadFile(HttpServletResponse response,String fileId) {
try {
byte[] content = storageClient1.download_file1(fileId);//得到檔案的位元組數組
OutputStream outputStream = response.getOutputStream();
outputStream.write(content); // 輸出資料
outputStream.flush();
outputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
2、外部webServer
拼接URL:vip+映射路徑+fileId(組名+檔案名)
删除檔案:
//删除失敗傳回-1,否則傳回0
public static int deleteFile(String fileId) {
try {
return storageClient1.delete_file1(fileId);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(-1);
return -1;
}
擷取檔案源資料
科普一把:什麼是中繼資料,官方解釋為描述資料的資料。比如檢視某人的資訊。姓名、性别、出生日期、電子照片等都是資料。其中電子照片的width、height、dpi都是用來描述電子照片的。是以width、height、dpi稱為中繼資料。
public static Map<String,String> getFileMetadata(String fileId) {
try {
NameValuePair[] metaList = storageClient1.get_metadata1(fileId);
if (metaList != null) {
HashMap<String,String> map = new HashMap<String, String>();
for (NameValuePair metaItem : metaList) {
map.put(metaItem.getName(),metaItem.getValue());
}
return map;
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}