日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Java 客戶端操作 FastDFS 實現文件上傳下載替換刪除功能

瀏覽:26日期:2022-08-22 16:19:22

FastDFS 的作者余慶先生已經為我們開發好了 Java 對應的 SDK。這里需要解釋一下:作者余慶并沒有及時更新最新的 Java SDK 至 Maven 中央倉庫,目前中央倉庫最新版仍舊是 1.27 版。所以我們需要通過 Github:https://github.com/happyfish100/fastdfs-client-java 下載項目源碼,再通過命令 mvn clean install 編譯打包導入 Maven 倉庫使用即可。

Java 客戶端操作 FastDFS 實現文件上傳下載替換刪除功能

接下來我們通過 Java API 操作 FastDFS 實現文件的上傳、下載、替換、刪除、查詢元數據、查詢詳情等功能。

文中案例已同步至:

Github:https://github.com/imrhelloworld/fastdfs-javaGitee:https://gitee.com/imrhelloworld/fastdfs-java

創建項目

Java 客戶端操作 FastDFS 實現文件上傳下載替換刪除功能

Java 客戶端操作 FastDFS 實現文件上傳下載替換刪除功能

添加依賴

在項目的 pom.xml 中添加以下依賴。因為我們需要一些常用工具包和單元測試,所以需要引入它們。

<!-- fastdfs java client --><dependency> <groupId>org.csource</groupId> <artifactId>fastdfs-client-java</artifactId> <version>1.29-SNAPSHOT</version></dependency><!-- apache commons lang3 工具包 --><dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.11</version></dependency><!-- junit 單元測試 --><dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13</version> <scope>test</scope></dependency>

編寫配置文件

fdfs_client.conf

# 超時時間connect_timeout = 10network_timeout = 30# 編碼字符集charset = UTF-8# tracker 服務器 HTTP 協議下暴露的端口http.tracker_http_port = 8080# tracker 服務器的 IP 和端口tracker_server = 192.168.10.101:22122

工具類

package org.example.client;import org.apache.commons.lang3.StringUtils;import org.csource.common.MyException;import org.csource.common.NameValuePair;import org.csource.fastdfs.*;import java.io.*;/** * FastDFS 分布式文件系統 Java 客戶端工具類 * 具體功能:文件上傳、下載、替換、刪除、查詢文件元數據、查看文件詳情 */public class FastDFSClient { // 獲取配置文件地址 private static final String CONF_FILENAME = Thread.currentThread() .getContextClassLoader().getResource('').getPath() + 'fdfs_client.conf'; // Storage 存儲服務器客戶端 private static StorageClient storageClient = null; static { try { // 加載配置文件 ClientGlobal.init(CONF_FILENAME); // 初始化 Tracker 客戶端 TrackerClient trackerClient = new TrackerClient(ClientGlobal.g_tracker_group); // 初始化 Tracker 服務端 TrackerServer trackerServer = trackerClient.getTrackerServer(); // 初始化 Storage 服務端 StorageServer storageServer = trackerClient.getStoreStorage(trackerServer); // 初始化 Storage 客戶端 storageClient = new StorageClient(trackerServer, storageServer); } catch (IOException e) { e.printStackTrace(); } catch (MyException e) { e.printStackTrace(); } } /** * 文件上傳 * * @param inputStream 上傳的文件的字節輸入流 * @param fileName 上傳的文件的原始名 * @return */ public static String[] uploadFile(InputStream inputStream, String fileName) { try { // 準備字節數組 byte[] fileBuff = null; // 文件元數據 NameValuePair[] metaList = null; if (inputStream != null) { // 查看文件的長度 int len = inputStream.available(); // 初始化元數據數組 metaList = new NameValuePair[2]; // 第一組元數據,文件的原始名稱 metaList[0] = new NameValuePair('file_name', fileName); // 第二組元數據,文件的長度 metaList[1] = new NameValuePair('file_length', String.valueOf(len)); // 創建對應長度的字節數組 fileBuff = new byte[len]; // 將輸入流中的字節內容,讀到字節數組中 inputStream.read(fileBuff); } /* 上傳文件。 參數含義:要上傳的文件的內容(使用字節數組傳遞),上傳的文件的類型(擴展名),元數據 */ String[] fileids = storageClient.upload_file(fileBuff, getFileExt(fileName), metaList); return fileids; } catch (IOException e) { e.printStackTrace(); } catch (MyException e) { e.printStackTrace(); } return null; } /** * 文件上傳 * * @param file 上傳的文件 * @param fileName 上傳的文件的原始名 * @return */ public static String[] uploadFile(File file, String fileName) { try (FileInputStream fis = new FileInputStream(file)) { return uploadFile(fis, fileName); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return null; } /** * 獲取文件后綴名(不帶點) * * @param fileName * @return 如:'jpg' or '' */ private static String getFileExt(String fileName) { if (StringUtils.isBlank(fileName) || !fileName.contains('.')) { return ''; } return fileName.substring(fileName.lastIndexOf('.') + 1); // 不帶最后的點 } /** * 獲取文件詳情 * * @param groupName 組/卷名,默認值:group1 * @param remoteFileName 文件名,例如:'M00/00/00/wKgKZl9tkTCAJAanAADhaCZ_RF0495.jpg' * @return 文件詳情 */ public static FileInfo getFileInfo(String groupName, String remoteFileName) { try { return storageClient.get_file_info(groupName == null ? 'group1' : groupName, remoteFileName); } catch (IOException e) { e.printStackTrace(); } catch (MyException e) { e.printStackTrace(); } return null; } /** * 獲取元數據 * * @param groupName 組/卷名,默認值:group1 * @param remoteFileName 文件名,例如:'M00/00/00/wKgKZl9tkTCAJAanAADhaCZ_RF0495.jpg' * @return 文件的元數據數組 */ public static NameValuePair[] getMetaData(String groupName, String remoteFileName) { try { // 根據組名和文件名通過 Storage 客戶端獲取文件的元數據數組 return storageClient.get_metadata(groupName == null ? 'group1' : groupName, remoteFileName); } catch (IOException e) { e.printStackTrace(); } catch (MyException e) { e.printStackTrace(); } return null; } /** * 文件下載 * * @param groupName 組/卷名,默認值:group1 * @param remoteFileName 文件名,例如:'M00/00/00/wKgKZl9tkTCAJAanAADhaCZ_RF0495.jpg' * @return 文件的字節輸入流 */ public static InputStream downloadFile(String groupName, String remoteFileName) { try { // 根據組名和文件名通過 Storage 客戶端獲取文件的字節數組 byte[] bytes = storageClient.download_file(groupName == null ? 'group1' : groupName, remoteFileName); // 返回字節流對象 InputStream inputStream = new ByteArrayInputStream(bytes); return inputStream; } catch (IOException e) { e.printStackTrace(); } catch (MyException e) { e.printStackTrace(); } return null; } /** * 文件刪除 * * @param groupName 組/卷名,默認值:group1 * @param remoteFileName 文件名,例如:'M00/00/00/wKgKZl9tkTCAJAanAADhaCZ_RF0495.jpg' * @return 0為成功,非0為失敗 */ public static int deleteFile(String groupName, String remoteFileName) { int result = -1; try { // 根據組名和文件名通過 Storage 客戶端刪除文件 result = storageClient.delete_file(groupName == null ? 'group1' : groupName, remoteFileName); } catch (IOException e) { e.printStackTrace(); } catch (MyException e) { e.printStackTrace(); } return result; } /** * 修改一個已經存在的文件 * * @param oldGroupName 舊組名 * @param oldFileName 舊文件名 * @param file 新文件 * @param fileName 新文件名 * @return */ public static String[] modifyFile(String oldGroupName, String oldFileName, File file, String fileName) { // 先上傳 String[] fileids = uploadFile(file, fileName); if (fileids == null) { return null; } // 再刪除 int delResult = deleteFile(oldGroupName, oldFileName); if (delResult != 0) { return null; } return fileids; }}

測試

文件上傳

// 文件上傳@Testpublic void testUploadFile() { String[] fileids = FastDFSClient.uploadFile(new File('D:/china.jpg'), 'china.jpg'); for (String fileid : fileids) { System.out.println('fileid = ' + fileid); }}

返回值

fileid = group1fileid = M00/00/00/wKgKZl9xMdiAcOLdAADhaCZ_RF0096.jpg

文件詳情

// 查看文件詳情@Testpublic void testGetFileInfo() { FileInfo fileInfo = FastDFSClient.getFileInfo('group1', 'M00/00/00/wKgKZl9xMdiAcOLdAADhaCZ_RF0096.jpg'); System.out.println('fileInfo = ' + fileInfo);}

返回值:

fileInfo = fetch_from_server = false, file_type = 1, source_ip_addr = 192.168.10.102, file_size = 57704, create_timestamp = 2020-09-28 08:44:08, crc32 = 645874781

文件元數據

// 獲取文件數據@Testpublic void testGetMetaData() { NameValuePair[] metaDatas = FastDFSClient.getMetaData('group1', 'M00/00/00/wKgKZl9xMdiAcOLdAADhaCZ_RF0096.jpg'); for (NameValuePair metaData : metaDatas) { System.out.println(metaData.getName() + '---' + metaData.getValue()); }}

返回值:

file_length---57704file_name---china.jpg

文件下載

// 文件下載@Testpublic void testDownloadFile() { InputStream is = FastDFSClient.downloadFile('group1', 'M00/00/00/wKgKZl9xMdiAcOLdAADhaCZ_RF0096.jpg'); try (FileOutputStream fos = new FileOutputStream('D:/wKgKZl9xMdiAcOLdAADhaCZ_RF0096.jpg')) { int len = 0; byte[] bytes = new byte[1024]; while ((len = is.read(bytes)) != -1) { fos.write(bytes, 0, len); fos.flush(); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }}

文件刪除

// 文件刪除@Testpublic void testDeleteFile() { int result = FastDFSClient.deleteFile('group1', 'M00/00/00/wKgKZl9xMdiAcOLdAADhaCZ_RF0096.jpg'); System.out.println('result = ' + result);}

返回值:

result = 0

文件替換

// 文件替換@Testpublic void testModifyFile() { String[] fileids = FastDFSClient.modifyFile('group1', 'M00/00/00/wKgKZl9xOS2ASdu8AADhaCZ_RF0898.jpg', new File('D:/mhw.jpg'), 'mhw.jpg'); for (String fileid : fileids) { System.out.println('fileid = ' + fileid); }}

返回值:

fileid = group1fileid = M00/00/00/wKgKZl9xOeaAFO00AACmo7QBGtA298.jpg

至此 Java 客戶端操作 FastDFS 實現文件上傳下載替換刪除等操作就到這里,下一篇我們帶大家搭建 FastDFS 的集群環境,多 Tracker 多 Storage 然后通過 Nginx 代理。

到此這篇關于Java 客戶端操作 FastDFS 實現文件上傳下載替換刪除功能的文章就介紹到這了,更多相關java 文件上傳下載替換刪除內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久久久久久欧美精品| 国产日韩欧美一区二区三区在线观看| 日韩avvvv在线播放| 欧美久久久网站| 超碰在线99| 亚洲免费网址| 国产精品中文| 久久国产影院| 日韩精品一级| 精品精品99| 99国产一区| 国产精品99久久免费| 欧美/亚洲一区| 国产毛片久久久| 久久精品亚洲欧美日韩精品中文字幕| 蜜臀久久99精品久久久久久9| 麻豆极品一区二区三区| 亚洲精品一区二区在线看| 欧美日韩一区二区三区在线电影| 涩涩av在线| 日本亚洲欧美天堂免费| av高清不卡| 欧美日韩精品一区二区三区视频 | 高清av一区| 蜜臀久久久久久久| 免费精品一区| 99pao成人国产永久免费视频| 国产精品1区| 亚洲综合三区| 日韩精品1区| 日本va欧美va精品发布| 亚洲一本视频| 国精品产品一区| 中文字幕亚洲精品乱码| 日韩在线第七页| 国产亚洲一区二区三区啪| 亚洲一级影院| 精品亚洲成人| 婷婷综合成人| 九九久久电影| 国产一区二区三区久久久久久久久| 亚洲一区二区毛片| 日韩大片在线| 蜜桃精品视频| 日韩在线成人| 欧美日韩国产一区二区三区不卡| 国产精品久久乐| 蜜臀久久99精品久久久久宅男| 国产在线|日韩| 美女视频网站久久| 日韩av一区二区在线影视| 黄色欧美日韩| 国产在线|日韩| 色综合狠狠操| 国产精品啊v在线| 中文字幕一区二区三区四区久久| 久久婷婷丁香| 正在播放日韩精品| 精品视频自拍| 国产精品一区二区三区av| 首页国产欧美日韩丝袜| 亚洲www啪成人一区二区| 久久久精品区| 国产美女久久| 91精品国产一区二区在线观看| 国产精品日韩久久久| 国产99久久| 日韩在线不卡| 97精品国产福利一区二区三区| 国产免费av国片精品草莓男男| 亚洲图片久久| 久久99伊人| 亚洲激情黄色| 久久激情婷婷| 日韩视频网站在线观看| 精品国产日韩欧美精品国产欧美日韩一区二区三区 | 久久国产三级| 日韩和欧美一区二区| 蜜桃视频一区二区| 丝袜美腿亚洲一区二区图片| 99国产精品| 国产精品毛片在线看| 妖精视频成人观看www| 欧美日韩第一| 欧美午夜不卡| 在线综合亚洲| 欧美一区=区| 在线免费观看亚洲| 亚洲91网站| 四虎精品一区二区免费| 四虎在线精品| 久久精品72免费观看| 久久国产人妖系列| 久久久久亚洲精品中文字幕| 精品视频网站| 国产美女高潮在线观看| 国产精品yjizz视频网| 色偷偷色偷偷色偷偷在线视频| av在线最新| 久久九九精品| 国产日韩专区| 日韩精品亚洲专区| 国产视频一区二| 国产精品欧美日韩一区| 国产精品视频一区视频二区| 国产黄色精品| 成人一区不卡| 欧美不卡高清一区二区三区| 99久久久久| 亚洲精品1区2区| 蜜臀av性久久久久蜜臀aⅴ流畅 | 蜜桃av一区二区三区电影| 婷婷视频一区二区三区| 日本免费在线视频不卡一不卡二| 国产欧美日韩影院| 国产中文字幕一区二区三区| 秋霞国产精品| 伊人久久成人| 日韩一区欧美二区| 欧美日韩亚洲一区二区三区在线| 麻豆精品在线观看| 日韩在线视频精品| 狠狠爱www人成狠狠爱综合网| 日韩中文字幕一区二区三区| 日韩成人一级| 国产+成+人+亚洲欧洲在线| 91精品一区二区三区综合在线爱 | 亚洲综合电影一区二区三区| 日韩一区二区三区精品| 久久亚洲人体| 黄色免费成人| 日韩一区中文| 精品视频一区二区三区在线观看 | 日韩国产精品久久久| 美腿丝袜亚洲一区| 成人精品亚洲| 蜜桃av一区二区| 精品国产一区二区三区2021| 亚洲二区三区不卡| 久久精品99国产精品| 久久久夜精品| 日韩成人在线看| 麻豆视频在线看| 石原莉奈一区二区三区在线观看| 国产亚洲精品美女久久| 欧美成人精品三级网站| 免费一级片91| 国产成人精品一区二区三区视频| 伊人精品视频| 久久精品国产亚洲一区二区三区| 五月天激情综合网| 国产精品3区| 国产农村妇女精品一二区| 国产激情一区| 亚洲欧美日韩在线观看a三区 | 欧美香蕉视频| 日韩一区二区三区免费视频| 国产精品久久久久av电视剧| 日本亚洲三级在线| 日韩中文字幕高清在线观看| 亚洲精品精选| 国产色播av在线| 91av一区| 一区免费视频| 高清一区二区三区av| 日本中文字幕不卡| 欧美色图国产精品| 免费在线欧美黄色| 亚洲一区av| se01亚洲视频| 国产精品久久| 丝袜国产日韩另类美女| 超碰成人av| 欧美日韩一区二区国产| 午夜在线视频观看日韩17c| 超级白嫩亚洲国产第一| 91亚洲精品在看在线观看高清| 国产专区一区| 国产一区二区视频在线看| 在线观看一区| 欧美日中文字幕| 成人在线丰满少妇av| 欧美精品中文字幕亚洲专区| 国产亚洲福利| 成人亚洲欧美| 国产乱人伦精品一区| 日韩中文字幕不卡| 欧美一区二区三区高清视频| 久久精品国产久精国产| 亚洲精品一级| 亚洲深夜av| 欧美aa国产视频| 毛片在线网站| 久久av网址| 日本欧美一区二区在线观看| 国产亚洲午夜| 久久国产小视频| 亚洲综合在线电影| 福利一区二区免费视频| 国产精品伦一区二区|