1. 程式人生 > >FastDFS:Java客戶都實現檔案的上傳、下載、修改、刪除

FastDFS:Java客戶都實現檔案的上傳、下載、修改、刪除

客戶端版本:fastdfs_client_v1.24.jar

 

配置檔案

connect_timeout = 200
network_timeout = 3000
charset = UTF-8
http.tracker_http_port = 8080
http.anti_steal_token = no
http.secret_key = FastDFS1234567890

#tracker_server = 192.168.1.171:22122
##叢集模式倆個跟蹤器:
tracker_server = 192.168.1.173:22122
tracker_server = 192.168.1.174:22122

客戶端操作:

package util;

import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger;
import org.csource.common.NameValuePair;
import
org.csource.fastdfs.ClientGlobal; import org.csource.fastdfs.StorageClient1; import org.csource.fastdfs.StorageServer; import org.csource.fastdfs.TrackerClient; import org.csource.fastdfs.TrackerGroup; import org.csource.fastdfs.TrackerServer; /** * * <B>系統名稱:</B><BR> * <B>模組名稱:</B><BR> * <B>中文類名:</B>FastDFS分散式檔案系統操作客戶端<BR> * <B>概要說明:</B>FastDFS分散式檔案系統操作客戶端<BR> *
@author bhz * @since 2013年11月10日 */ public class FastDFSClientUtils { private static final String CONF_FILENAME = Thread.currentThread().getContextClassLoader().getResource("fastdfs_client.conf").getPath(); private static Logger logger = Logger.getLogger(FastDFSClientUtils.class); private static TrackerClient trackerClient; //載入檔案 static { try { ClientGlobal.init(CONF_FILENAME); TrackerGroup trackerGroup = ClientGlobal.g_tracker_group; trackerClient = new TrackerClient(trackerGroup); } catch (Exception e) { logger.error(e); } } /** * <B>方法名稱:</B>上傳方法<BR> * <B>概要說明:</B><BR> * @param file 檔案 * @param path 路徑 * @return 上傳成功返回id,失敗返回null */ public static String upload(File file, String path) { TrackerServer trackerServer = null; StorageServer storageServer = null; StorageClient1 storageClient1 = null; FileInputStream fis = null; try { NameValuePair[] meta_list = null; // new NameValuePair[0]; fis = new FileInputStream(file); byte[] file_buff = null; if (fis != null) { int len = fis.available(); file_buff = new byte[len]; fis.read(file_buff); } trackerServer = trackerClient.getConnection(); if (trackerServer == null) { logger.error("getConnection return null"); } storageServer = trackerClient.getStoreStorage(trackerServer); storageClient1 = new StorageClient1(trackerServer, storageServer); String fileid = storageClient1.upload_file1(file_buff, getFileExt(path), meta_list); return fileid; } catch (Exception ex) { logger.error(ex); return null; }finally{ if (fis != null){ try { fis.close(); } catch (IOException e) { logger.error(e); } } if (storageServer != null){ try { storageServer.close(); } catch (IOException e) { e.printStackTrace(); } } if (trackerServer != null){ try { trackerServer.close(); } catch (IOException e) { e.printStackTrace(); } } storageClient1 = null; } } /** * <B>方法名稱:</B>上傳方法<BR> * <B>概要說明:</B><BR> * @param data 資料 * @param path 路徑 * @return 上傳成功返回id,失敗返回null */ public static String upload(byte[] data, String extName) { TrackerServer trackerServer = null; StorageServer storageServer = null; StorageClient1 storageClient1 = null; try { NameValuePair[] meta_list = null; // new NameValuePair[0]; trackerServer = trackerClient.getConnection(); if (trackerServer == null) { logger.error("getConnection return null"); } storageServer = trackerClient.getStoreStorage(trackerServer); storageClient1 = new StorageClient1(trackerServer, storageServer); String fileid = storageClient1.upload_file1(data, extName, meta_list); return fileid; } catch (Exception ex) { logger.error(ex); return null; }finally{ if (storageServer != null){ try { storageServer.close(); } catch (IOException e) { e.printStackTrace(); } } if (trackerServer != null){ try { trackerServer.close(); } catch (IOException e) { e.printStackTrace(); } } storageClient1 = null; } } /** * <B>方法名稱:</B>下載方法<BR> * <B>概要說明:</B>通過檔案id進行下載<BR> * @param fileId 檔案id * @return 返回InputStream */ public static InputStream download(String groupName, String fileId) { TrackerServer trackerServer = null; StorageServer storageServer = null; StorageClient1 storageClient1 = null; try { trackerServer = trackerClient.getConnection(); if (trackerServer == null) { logger.error("getConnection return null"); } storageServer = trackerClient.getStoreStorage(trackerServer, groupName); storageClient1 = new StorageClient1(trackerServer, storageServer); byte[] bytes = storageClient1.download_file1(fileId); InputStream inputStream = new ByteArrayInputStream(bytes); return inputStream; } catch (Exception ex) { logger.error(ex); return null; } finally { if (storageServer != null){ try { storageServer.close(); } catch (IOException e) { e.printStackTrace(); } } if (trackerServer != null){ try { trackerServer.close(); } catch (IOException e) { e.printStackTrace(); } } storageClient1 = null; } } /** * <B>方法名稱:</B>刪除方法<BR> * <B>概要說明:</B>根據id來刪除一個檔案<BR> * @param fileId 檔案id * @return 刪除成功返回0,非0則操作失敗,返回錯誤程式碼 */ public static int delete(String groupName, String fileId) { TrackerServer trackerServer = null; StorageServer storageServer = null; StorageClient1 storageClient1 = null; try { trackerServer = trackerClient.getConnection(); if (trackerServer == null) { logger.error("getConnection return null"); } storageServer = trackerClient.getStoreStorage(trackerServer, groupName); storageClient1 = new StorageClient1(trackerServer, storageServer); int result = storageClient1.delete_file1(fileId); return result; } catch (Exception ex) { logger.error(ex); return 0; } finally { if (storageServer != null){ try { storageServer.close(); } catch (IOException e) { e.printStackTrace(); } } if (trackerServer != null){ try { trackerServer.close(); } catch (IOException e) { e.printStackTrace(); } } storageClient1 = null; } } /** * <B>方法名稱:</B><BR> * <B>概要說明:</B><BR> * @param oldFileId 舊檔案id * @param file 新檔案 * @param path 新檔案路徑 * @return 上傳成功返回id,失敗返回null */ public static String modify(String oldGroupName, String oldFileId, File file, String path) { String fileid = null; try { // 先上傳 fileid = upload(file, path); if (fileid == null) { return null; } // 再刪除 int delResult = delete(oldGroupName, oldFileId); if (delResult != 0) { return null; } } catch (Exception ex) { logger.error(ex); return null; } return fileid; } /** * <B>方法名稱:</B>獲取檔案字尾名<BR> * <B>概要說明:</B>獲取檔案字尾名<BR> * @param fileName * @return 如:"jpg"、"txt"、"zip" 等 */ private static String getFileExt(String fileName) { if (StringUtils.isBlank(fileName) || !fileName.contains(".")) { return ""; } else { return fileName.substring(fileName.lastIndexOf(".") + 1); } } }

測試:

package util;

import java.io.File;
import java.io.InputStream;

import org.apache.commons.io.FileUtils;



public class FastDFSTest {
    
    /**
     * 上傳
     */
    public static void upload() throws Exception {
        // id:    group1/M00/00/00/wKgBr1crVnSAbI4sAAAeV2aU4jU126.jpg
        // fastdfsBasePath = http://192.168.1.170/fastdfs
        // url:    http://192.168.1.170/fastdfs/group1/M00/00/00/wKgBr1crVnSAbI4sAAAeV2aU4jU126.jpg
        String path = System.getProperty("user.dir") + File.separatorChar + "source" +  File.separatorChar + "001.jpg";
        File file = new File(path);
        String fileId = FastDFSClientUtils.upload(file, path);
        System.out.println("本地檔案:" + path + ",上傳成功! 檔案ID為:" + fileId);
    }
    
    /**
     * 下載
     */
    public static void download() throws Exception {
        // id:    group1/M00/00/00/wKgBr1crVnSAbI4sAAAeV2aU4jU126.jpg
        // url:    http://192.168.1.170/fastdfs/group1/M00/00/00/wKgBr1crVnSAbI4sAAAeV2aU4jU126.jpg
        String fileId = "group1/M00/00/00/wKgBr1crUIuAJ22iAADHTIxNXeI872.jpg";
        InputStream inputStream = FastDFSClientUtils.download("group1", fileId);
        System.out.println(inputStream.available());
        String path = System.getProperty("user.dir") + File.separatorChar + "receive" +  File.separatorChar + "001.jpg";
        System.out.println(path);
        //FileUtils.copyInputStreamToFile(inputStream,  new File(path));
    }

    /**
     * 刪除
     */
    public static void delete() throws Exception {
        String fileId = "group1/M00/00/00/wKgBr1crVnSAbI4sAAAeV2aU4jU126.jpg";
        int result = FastDFSClientUtils.delete("group1", fileId);
        System.out.println(result == 0 ? "刪除成功" : "刪除失敗:" + result);
    }


    
    /**
     * @param args
     * @throws Exception 
     */
    public static void main(String[] args) throws Exception {
    

        //upload();
        download();
        Thread.sleep(10000);
        download();
        Thread.sleep(10000);
        download();
        //delete();

    }

}