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;
}
}
相關文章
- FastDFS的配置、部署與API使用解讀(2)以位元組方式上傳檔案的客戶端程式碼ASTAPI客戶端
- FastDFS的配置、部署與API使用解讀(8)FastDFS多種檔案上傳介面詳解ASTAPI
- FastDFS的配置、部署與API使用解讀(7)Nginx的FastDFS模組ASTAPINginx
- FastDFS的配置、部署與API使用解讀(1)Get Started with FastDFSASTAPI
- FastDFS的配置、部署與API使用解讀(6)FastDFS配置詳解之Storage配置ASTAPI
- FastDFS的配置、部署與API使用解讀(5)FastDFS配置詳解之Tracker配置ASTAPI
- FastDFS的配置、部署與API使用解讀(4)FastDFS配置詳解之Client配置ASTAPIclient
- 使用java呼叫fastDFS客戶端進行靜態資原始檔上傳JavaAST客戶端
- 以 Laravel 的方式呼叫 ai 客戶端LaravelAI客戶端
- 一個端到端的基於 form 表單的檔案上傳程式,包含客戶端和伺服器端ORM客戶端伺服器
- Tivoli AIX客戶端配置檔案的設定AI客戶端
- 桌面雲的客戶端與接入方式客戶端
- 實現上傳(增刪)多個檔案的客戶端寫法。 (轉)客戶端
- 郵件客戶端的配置使用客戶端
- 檔案下載之斷點續傳(客戶端與服務端的實現)斷點客戶端服務端
- 客戶端配置檔案tnsname.ora客戶端
- Java API——RMIIO入門教程(4)遠端流傳輸示例之RMIIO客戶端碼JavaAPI客戶端
- 客戶端svn上傳後,原始檔案在伺服器的什麼位置?客戶端伺服器
- zookeeper Java客戶端API的使用方法Java客戶端API
- zookeeper的Java客戶端APIJava客戶端API
- 檔案上傳——客戶端檢測繞過(JavaScript檢測)(一)客戶端JavaScript
- 分散式檔案儲存FastDFS(七)FastDFS配置檔案詳解分散式AST
- vue3使用ElementPlus upload上傳檔案的兩種方式Vue
- 關於檔案上傳。以上傳人來設定限額,或者以每天總額度,或者可以設定同時上傳的客戶端總數。客戶端
- Asterisk-WebRTC客戶端的部署ASTWeb客戶端
- 使用electron和vue,以ipc通訊的方式構建客戶端版本的掘金首頁Vue客戶端
- Java 專案中使用 Resilience4j 實現客戶端 API 呼叫的限速/節流機制Java客戶端API
- 客戶端網路配置上的一點說明客戶端
- 一文搞定FastDFS分散式檔案系統配置與部署AST分散式
- OSSEC服務端配置客戶端批次部署方案服務端客戶端
- Tomcat配置Gizp 客戶端使用okHttp3Tomcat客戶端HTTP
- MQTTJava客戶端的使用MQQTJava客戶端
- redis客戶端的使用Redis客戶端
- FastDFS-nginx外掛作為FastDFS客戶端訪問ASTNginx客戶端
- 誰有檔案上傳的好的程式碼呢?
- SecureFX for Mac(跨平臺檔案傳輸客戶端)Mac客戶端
- 請教一個web群集下面客戶上傳檔案的問題Web
- 京東金融客戶端使用者觸達方式的探索與實踐客戶端