FastDFS的配置、部署與API使用解讀(3)以流的方式上傳檔案的客戶端程式碼
呼叫的API為:
String[] upload_file(
String group_name,//組名,不指定則可設為null
long file_size,//檔案大小,必須制定
UploadCallback callback,//回撥
String file_ext_name,
NameValuePair[] meta_list
)
/**
* Upload File to DFS, directly transferring java.io.InputStream to java.io.OutStream
* @author Poechant
* @email zhongchao.ustc@gmail.com
* @param fileBuff, file to be uploaded.
* @param uploadFileName, the name of the file.
* @param fileLength, the length of the file.
* @return the file ID in DFS.
* @throws IOException
*/
public String[] uploadFileByStream(InputStream inStream, String uploadFileName, long fileLength) throws IOException {
String[] results = null;
String fileExtName = "";
if (uploadFileName.contains(".")) {
fileExtName = uploadFileName.substring(uploadFileName.lastIndexOf(".") + 1);
} else {
logger.warn("Fail to upload file, because the format of filename is illegal.");
return results;
}
TrackerClient tracker = new TrackerClient();
TrackerServer trackerServer = tracker.getConnection();
StorageServer storageServer = null;
StorageClient1 client = new StorageClient1(trackerServer, storageServer);
NameValuePair[] metaList = new NameValuePair[3];
metaList[0] = new NameValuePair("fileName", uploadFileName);
metaList[1] = new NameValuePair("fileExtName", fileExtName);
metaList[2] = new NameValuePair("fileLength", String.valueOf(fileLength));
try {
// results[0]: groupName, results[1]: remoteFilename.
results = client.upload_file(null, fileLength, new UploadFileSender(inStream), fileExtName, metaList);
} catch (Exception e) {
logger.warn("Upload file \"" + uploadFileName + "\"fails");
}
trackerServer.close();
return results;
}
其中的UploadFileSender是一個實現了UploadCallback介面的類:
private static class UploadFileSender implements UploadCallback {
private InputStream inStream;
public UploadFileSender(InputStream inStream) {
this.inStream = inStream;
}
public int send(OutputStream out) throws IOException {
int readBytes;
while((readBytes = inStream.read()) > 0) {
out.write(readBytes);
}
return 0;
}
}
相關文章
- 以 Laravel 的方式呼叫 ai 客戶端LaravelAI客戶端
- 一個端到端的基於 form 表單的檔案上傳程式,包含客戶端和伺服器端ORM客戶端伺服器
- vue3使用ElementPlus upload上傳檔案的兩種方式Vue
- 郵件客戶端的配置使用客戶端
- 檔案下載之斷點續傳(客戶端與服務端的實現)斷點客戶端服務端
- 客戶端svn上傳後,原始檔案在伺服器的什麼位置?客戶端伺服器
- 分散式檔案儲存FastDFS(七)FastDFS配置檔案詳解分散式AST
- 檔案上傳的幾種方式
- 利用程序池給客戶端傳檔案客戶端
- zookeeper的Java客戶端APIJava客戶端API
- 【SQLPLUS】sqlplus 客戶端所需的檔案列表SQL客戶端
- 檔案上傳——客戶端檢測繞過(JavaScript檢測)(一)客戶端JavaScript
- 服務端和客戶端 RESTful 介面上傳 Excel 的 Python 程式碼服務端客戶端RESTExcelPython
- Tomcat配置Gizp 客戶端使用okHttp3Tomcat客戶端HTTP
- Java SSH 客戶端 如何刪除 linux 機器上的 檔案Java客戶端Linux
- FastDFS伺服器叢集部署和整合客戶端到SpringBootAST伺服器客戶端Spring Boot
- Java 專案中使用 Resilience4j 實現客戶端 API 呼叫的限速/節流機制Java客戶端API
- Asterisk-WebRTC客戶端的部署ASTWeb客戶端
- 阿里雲oss 上傳檔案的兩種方式(本地路徑上傳遠端連結上傳)阿里
- 利用執行緒池給客戶端傳檔案執行緒客戶端
- SecureFX for Mac(跨平臺檔案傳輸客戶端)Mac客戶端
- Nebula Graph 原始碼解讀系列|客戶端的通訊秘密——fbthrift原始碼客戶端
- FastDFS-nginx外掛作為FastDFS客戶端訪問ASTNginx客戶端
- python程式碼讀取遠端檔案的方法--paramikoPython
- 檔案的上傳與下載
- Window主機與Linux 虛擬機器之間的檔案傳輸(二):FileZilla客戶端Linux虛擬機客戶端
- OSSEC服務端配置客戶端批次部署方案服務端客戶端
- Spring Boot讀取配置檔案的幾種方式Spring Boot
- GRpc新增客戶端的五種方式RPC客戶端
- Qt實現基於多執行緒的檔案傳輸(服務端,客戶端)QT執行緒服務端客戶端
- Nebula Graph 原始碼解讀系列|客戶端的通訊祕密——fbthrift原始碼客戶端
- nodejs的tream(流)解析與模擬檔案讀寫流原始碼實現NodeJS原始碼
- 幾種windows到linux上傳檔案的方式WindowsLinux
- 京東金融客戶端使用者觸達方式的探索與實踐客戶端
- 使用OAuth保護REST API並使用簡單的Angular客戶端OAuthRESTAPIAngular客戶端
- 詳解Nacos 配置中心客戶端配置快取動態更新的原始碼實現客戶端快取原始碼
- Zookeeper 客戶端 API客戶端API
- kubernetes 客戶端KubeClient使用及常用api客戶端clientAPI
- YUM源伺服器搭建與客戶端配置使用伺服器客戶端