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

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

2012-12-07 10:02 1261 查看
本文转载自:诗商·柳惊鸿CSDN博客,链接为:http://blog.csdn.net/poechant/article/details/7213536

转载目的仅仅为方便博主自己学习。

 

调用的API为:

String[] upload_file(

String group_name,//组名,不指定则可设为null

long file_size,//文件大小,必须制定

UploadCallback callback,//回调

String file_ext_name,

NameValuePair[] meta_list

)

[java]
view plaincopyprint?

/**
* 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;      


/**
* 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");
}

trac
4000
kerServer.close();

return results;
}

其中的UploadFileSender是一个实现了UploadCallback接口的类:

[java]
view plaincopyprint?

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

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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐