您的位置:首页 > 编程语言

FastDFS的配置、部署与API使用解读(3)以流的方式上传文件的客户端代码

2015-11-18 16:47 741 查看
调用的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;  

    }  

}   

版权声明:本文为博主原创文章,未经博主允许不得转载。合作请联系微信 sinosuperman。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  fastdfs 负载均衡