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

 

posted @ 2020-02-07 10:24  codedot  阅读(2524)  评论(0编辑  收藏  举报