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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值