FastDFS的配置、部署与API使用解读(3)以流的方式上传文件的客户端代码

调用的API为:

String[] upload_file(

String group_name,//组名,不指定则可设为null

long file_size,//文件大小,必须制定

UploadCallback callback,//回调

String file_ext_name,

NameValuePair[] meta_list

)

 1     /** 

 2      * Upload File to DFS, directly transferring java.io.InputStream to java.io.OutStream 

 3      * @author Poechant 

 4      * @email [email protected] 

 5      * @param fileBuff, file to be uploaded. 

 6      * @param uploadFileName, the name of the file. 

 7      * @param fileLength, the length of the file. 

 8      * @return the file ID in DFS. 

 9      * @throws IOException  

10      */  

11     public String[] uploadFileByStream(InputStream inStream, String uploadFileName, long fileLength) throws IOException {  

12           

13         String[] results = null;  

14         String fileExtName = "";  

15         if (uploadFileName.contains(".")) {  

16             fileExtName = uploadFileName.substring(uploadFileName.lastIndexOf(".") + 1);  

17         } else {  

18             logger.warn("Fail to upload file, because the format of filename is illegal.");  

19             return results;  

20         }  

21           

22         TrackerClient tracker = new TrackerClient();  

23            TrackerServer trackerServer = tracker.getConnection();  

24            StorageServer storageServer = null;  

25            StorageClient1 client = new StorageClient1(trackerServer, storageServer);  

26              

27            NameValuePair[] metaList = new NameValuePair[3];  

28            metaList[0] = new NameValuePair("fileName", uploadFileName);  

29            metaList[1] = new NameValuePair("fileExtName", fileExtName);  

30            metaList[2] = new NameValuePair("fileLength", String.valueOf(fileLength));  

31              

32            try {  

33             // results[0]: groupName, results[1]: remoteFilename.  

34             results = client.upload_file(null, fileLength, new UploadFileSender(inStream), fileExtName, metaList);  

35         } catch (Exception e) {  

36             logger.warn("Upload file \"" + uploadFileName + "\"fails");  

37         }  

38              

39             trackerServer.close();  

40           

41         return results;       

42     }  

其中的UploadFileSender是一个实现了UploadCallback接口的类:

 1     private static class UploadFileSender implements UploadCallback {  

 2           

 3         private InputStream inStream;  

 4           

 5         public UploadFileSender(InputStream inStream) {  

 6             this.inStream = inStream;  

 7         }  

 8           

 9         public int send(OutputStream out) throws IOException {  

10             int readBytes;  

11             while((readBytes = inStream.read()) > 0) {  

12                 out.write(readBytes);  

13             }  

14             return 0;  

15         }  

16     }   

 

你可能感兴趣的:(fastDFS)