`
Poechant
  • 浏览: 210312 次
博客专栏
Bebe66e7-3a30-3fc9-aeea-cfa3b474b591
Nginx高性能Web服务...
浏览量:23421
5738817b-23a1-3a32-86de-632d7da73b1e
Cumulus实时媒体服务...
浏览量:21352
社区版块
存档分类
最新评论

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;
		}
	} 


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics