FastDFS Java客戶端使用


一、導包

注意:maven中央倉庫並沒有這個依賴,需要自行尋找資源並安裝到本地maven倉庫,才能正常使用下方的依賴

<dependency>
  <groupId>org.csource</groupId>
  <artifactId>fastdfs-client-java</artifactId>
  <version>1.25</version>
</dependency>

cmd下安裝依賴:

mvn install:install-file -DgroupId=org.csource -DartifactId=fastdfs-client-java -Dversion=1.25 -Dpackaging=jar -Dfile=D:\fastdfs_client-1.25.jar

pom.xml

<!--commons-io-->
<dependency>
  <groupId>commons-io</groupId>
  <artifactId>commons-io</artifactId>
  <version>2.6</version>
</dependency>
<!--fastdfs客戶端-->
<dependency>
  <groupId>org.csource</groupId>
  <artifactId>fastdfs-client-java</artifactId>
  <version>1.25</version>
</dependency>
<!--日志-->
<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-api</artifactId>
  <version>1.7.21</version>
</dependency>
<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-log4j12</artifactId>
  <version>1.7.21</version>
</dependency>

二、操作API

在src/main/resources下創建配置文件。

log4j.properties

log4j.rootLogger=info, ServerDailyRollingFile, stdout
log4j.appender.ServerDailyRollingFile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.ServerDailyRollingFile.DatePattern='.'yyyy-MM-dd
log4j.appender.ServerDailyRollingFile.File=logs/notify-subscription.log
log4j.appender.ServerDailyRollingFile.layout=org.apache.log4j.PatternLayout
log4j.appender.ServerDailyRollingFile.layout.ConversionPattern=%d - %m%n
log4j.appender.ServerDailyRollingFile.Append=true
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss} %p [%l] %m%n

fdfs_client.conf

# 連接tracker服務器超時時長
connect_timeout = 10
# socket連接超時時長
network_timeout = 30
# 文件內容編碼
charset = UTF-8
# Tracker Server提供HTTP服務的端口
# 與安裝時tracker.conf的port值一致
http.tracker_http_port = 22122
# 防盜鏈Token
http.anti_steal_token = no
# 密鑰, 隨便寫
http.secret_key = FastDFS1234567890
# tracker服務器IP和端口(可以寫多個)
tracker_server = 192.168.178.7:22122
tracker_server = 192.168.178.10:22122

FastDFS文件上傳下載工具類

import org.apache.commons.io.FilenameUtils;
import org.apache.commons.io.IOUtils;
import org.apache.log4j.Logger;
import org.csource.common.NameValuePair;
import org.csource.fastdfs.*;
import java.io.*;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

/**
 * @Description FastDFS文件上傳下載工具類
 */
public final class FastDFSClient {
    private static final Logger logger = Logger.getLogger(FastDFSClient.class);
    /*直接放在類路徑下, 不能在前面加入 / 符號(/fdfs_client.conf) */
    private static final String CONFIG_FILENAME = "fdfs_client.conf";
    private static StorageClient1 storageClient1 = null;
    static {
        try {
            //加載連接信息
            ClientGlobal.init(CONFIG_FILENAME);
            //創建TrackerClient對象
            TrackerClient trackerClient = new TrackerClient();
            //獲取TrackerServer對象
            TrackerServer trackerServer = trackerClient.getConnection();
            if (trackerServer == null) {
                throw new IllegalStateException("getConnection return null");
            }
            //創建StorageServer對象
            StorageServer storageServer = trackerClient.getStoreStorage(trackerServer);
            if (storageServer == null) {
                throw new IllegalStateException("getStoreStorage return null");
            }
            //使用TrackerServer和StorageServer構造StorageClient對象
            storageClient1 = new StorageClient1(trackerServer,storageServer);
        } catch (Exception e) {
            logger.error("創建storage client失敗:" + e);
        }
    }
    private FastDFSClient(){}

    /**
     * 上傳文件
     * @param file 文件對象
     * @param fileName 文件名
     * @return
     */
    public static String uploadFile(File file, String fileName) {
        return uploadFile(file,fileName,null);
    }

    /**
     * 上傳文件
     * @param file 文件對象
     * @param fileName 文件名
     * @param metaList 文件元數據
     * @return
     */
    public static String uploadFile(File file, String fileName, Map<String,String> metaList) {
        try {
            byte[] buff = IOUtils.toByteArray(new FileInputStream(file));
            NameValuePair[] nameValuePairs = null;
            if (metaList != null) {
                nameValuePairs = new NameValuePair[metaList.size()];
                int index = 0;
                for (Iterator<Map.Entry<String,String>> iterator = metaList.entrySet().iterator(); iterator.hasNext();) {
                    Map.Entry<String,String> entry = iterator.next();
                    String name = entry.getKey();
                    String value = entry.getValue();
                    nameValuePairs[index++] = new NameValuePair(name,value);
                }
            }
            return storageClient1.upload_file1(buff, FilenameUtils.getExtension(fileName), nameValuePairs);
        } catch (Exception e) {
            logger.error("上傳文件失敗:" + e);
        }
        return null;
    }

    /**
     * 獲取文件元數據
     * @param fileId 文件ID
     * @return
     */
    public static Map<String,String> getFileMetadata(String fileId) {
        try {
            NameValuePair[] metaList = storageClient1.get_metadata1(fileId);
            if (metaList != null) {
                HashMap<String,String> map = new HashMap<String, String>();
                for (NameValuePair metaItem : metaList) {
                    map.put(metaItem.getName(),metaItem.getValue());
                }
                return map;
            }
        } catch (Exception e) {
            logger.error("獲取文件元數據失敗:" + e);
        }
        return null;
    }

    /**
     * 刪除文件
     * @param fileId 文件ID
     * @return 刪除失敗返回-1,否則返回0
     */
    public static int deleteFile(String fileId) {
        try {
            return storageClient1.delete_file1(fileId);
        } catch (Exception e) {
            logger.error("刪除文件失敗:" + e);
        }
        return -1;
    }

    /**
     * 下載文件
     * @param fileId 文件ID(上傳文件成功后返回的ID)
     * @param outFile 文件下載保存位置
     * @return
     */
    public static int downloadFile(String fileId, File outFile) {
        FileOutputStream fos = null;
        ByteArrayInputStream in = null;
        try {
            byte[] content = storageClient1.download_file1(fileId);
            in = new ByteArrayInputStream(content, 1, content.length);
            fos = new FileOutputStream(outFile);
            IOUtils.copy(in,fos);
            return 0;
        } catch (Exception e) {
            logger.error("下載文件失敗:" + e);
        } finally {
            if (in != null) {
                try {
                    in.close();
                } catch (IOException e) {
                    logger.error("下載文件完畢后, 關閉輸入流失敗" + e);
                }
            }
            if (fos != null) {
                try {
                    fos.close();
                } catch (IOException e) {
                    logger.error("下載文件完畢后, 關閉輸出流失敗" + e);
                }
            }
        }
        return -1;
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM