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


评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

钟超

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值