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


    调用的API为:

    String[] upload_file(

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

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

    UploadCallback callback,//回调

    String file_ext_name,

    NameValuePair[] meta_list

    )

    1. /**
    2. * Upload File to DFS, directly transferring java.io.InputStream to java.io.OutStream
    3. * @author Poechant
    4. * @email zhongchao.ustc@gmail.com
    5. * @param fileBuff, file to be uploaded.
    6. * @param uploadFileName, the name of the file.
    7. * @param fileLength, the length of the file.
    8. * @return the file ID in DFS.
    9. * @throws IOException
    10. */ 
    11. public String[] uploadFileByStream(InputStream inStream, String uploadFileName, long fileLength) throws IOException { 
    12.      
    13.     String[] results = null; 
    14.     String fileExtName = ""; 
    15.     if (uploadFileName.contains(".")) { 
    16.         fileExtName = uploadFileName.substring(uploadFileName.lastIndexOf(".") + 1); 
    17.     } else { 
    18.         logger.warn("Fail to upload file, because the format of filename is illegal."); 
    19.         return results; 
    20.     } 
    21.      
    22.     TrackerClient tracker = new TrackerClient(); 
    23.        TrackerServer trackerServer = tracker.getConnection(); 
    24.        StorageServer storageServer = null; 
    25.        StorageClient1 client = new StorageClient1(trackerServer, storageServer); 
    26.         
    27.        NameValuePair[] metaList = new NameValuePair[3]; 
    28.        metaList[0] = new NameValuePair("fileName", uploadFileName); 
    29.        metaList[1] = new NameValuePair("fileExtName", fileExtName); 
    30.        metaList[2] = new NameValuePair("fileLength", String.valueOf(fileLength)); 
    31.         
    32.        try { 
    33.         // results[0]: groupName, results[1]: remoteFilename. 
    34.         results = client.upload_file(null, fileLength, new UploadFileSender(inStream), fileExtName, metaList); 
    35.     } catch (Exception e) { 
    36.         logger.warn("Upload file "" + uploadFileName + ""fails"); 
    37.     } 
    38.         
    39.         trackerServer.close(); 
    40.      
    41.     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");
    		}
            
      		trackerServer.close();
    		
    		return results;		
    	}

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

    1. private static class UploadFileSender implements UploadCallback { 
    2.      
    3.     private InputStream inStream; 
    4.      
    5.     public UploadFileSender(InputStream inStream) { 
    6.         this.inStream = inStream; 
    7.     } 
    8.      
    9.     public int send(OutputStream out) throws IOException { 
    10.         int readBytes; 
    11.         while((readBytes = inStream.read()) > 0) { 
    12.             out.write(readBytes); 
    13.         } 
    14.         return 0; 
    15.     } 
    16. }  
    	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;
    		}
    	} 
  • 相关阅读:
    插件式编程之使用反射分离MDI的父窗口和子窗口
    我总结的三层结构之一:Model示例
    我总结的三层结构之二:IDAL示例
    02.08 代理模式
    02.09 装饰模式
    块元素、行元素容纳规则
    CSS继承选择器与包含选择器的比较
    02.07 适配器模式
    02.10 桥模式
    匿名方法
  • 原文地址:https://www.cnblogs.com/fengchaowang/p/4138060.html
Copyright © 2020-2023  润新知