|
调用的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[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 }
|
|
|