biao199423 发表于 2015-9-10 10:58:45

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 zhongchao.ustc@gmail.com
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;
28            metaList = new NameValuePair("fileName", uploadFileName);
29            metaList = new NameValuePair("fileExtName", fileExtName);
30            metaList = new NameValuePair("fileLength", String.valueOf(fileLength));
31            
32            try {
33             // results: groupName, results: 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   }   
  
页: [1]
查看完整版本: FastDFS的配置、部署与API使用解读(3)以流的方式上传文件的客户端代码(转)