• 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;
        }
    }
  • 相关阅读:
    FreeSql.Repository (九)级联保存
    FreeSql.Repository (八)级联加载
    FreeSql.Repository (七)多表查询
    FreeSql.Repository (六)导航属性
    FreeSql.Repository (五)状态管理
    FreeSql.Repository (四)工作单元
    FreeSql.Repository (三)实体特性
    FreeSql.Repository (一)什么是仓储
    [开源] .Net 使用 ORM 访问 华为GaussDB数据库
    24位PCM采样数据转成16位算法,已实现PCM转WAV在线工具源码支持24bits、16bits、8bits
  • 原文地址:https://www.cnblogs.com/myitnews/p/12272126.html
Copyright © 2020-2023  润新知