zoukankan      html  css  js  c++  java
  • fastdfs客户端工具类

    pom:

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

    百度云链接:https://pan.baidu.com/s/1i3yaSbb0pY7n0FiZ71XePA   提取码:c68d

    application.yml

    fastdfs:
      tracker_server: 192.168.100.105:22122
      connect_timeout: 5
      network_timeout: 30
      charset: UTF-8
      http:
        secret_key: FastDFS1234567890
        tracker_http_port: 8081
        anti_steal:
          check_token: no

    代码1:

    public final class FastDFSHelper {
        private static final Logger logger = LoggerFactory.getLogger(FastDFSHelper.class);
        private static TrackerClient trackerClient;
     
        static {
            try {
                ClientGlobal.init("fdfs_client.conf");
                trackerClient = new TrackerClient();
            } catch (IOException | MyException e) {
                logger.error("error", e);
            }
        }
     
        /**
         * 向FastDFS上传文件
         *
         * @param localFilename 本地文件名
         * @return 上传成功,返回组名和该文件在FastDFS中的名称;上传失败,返回null
         */
        public static void uploadFile(String localFilename) {
            TrackerServer trackerServer;
            try {
                trackerServer = trackerClient.getConnection();
            } catch (IOException e) {
                logger.error("error", e);
                return;
            }
            StorageClient storageClient = new StorageClient(trackerServer, null);
            try {
                String[] arr = storageClient.upload_file(localFilename, null, null);
                if (arr == null || arr.length != 2) {
                    logger.error("向FastDFS上传文件失败");
                } else {
                    logger.info("向FastDFS上传文件成功");
                }
            } catch (IOException | MyException e) {
                logger.error("error", e);
            } finally {
                closeTrackerServer(trackerServer);
            }
        }
     
        /**
         * 从FastDFS下载文件
         *
         * @param localFilename  本地文件名
         * @param groupName      文件在FastDFS中的组名
         * @param remoteFilename 文件在FastDFS中的名称
         */
        public static void downloadFile(String localFilename, String groupName, String remoteFilename) {
           TrackerServer trackerServer;
            try {
                trackerServer = trackerClient.getConnection();
            } catch (IOException e) {
                logger.error("error", e);
                return;
            }
            StorageClient storageClient = new StorageClient(trackerServer, null);
            File file = new File(localFilename);
            try (BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file))) {
                byte[] content = storageClient.download_file(groupName, remoteFilename);
                if (content == null || content.length == 0) {
                    logger.error("文件大小为空!");
                    boolean flag = file.delete();
                    logger.info("删除文件结果:{}", flag);
                    return;
                }
                bos.write(content);
                logger.info("成功下载文件: " + localFilename);
            } catch (IOException | MyException e) {
                logger.error("error", e);
            } finally {
                closeTrackerServer(trackerServer);
            }
        }
     
        /**
         * 从FastDFS删除文件
         *
         * @param localFilename  本地文件名
         * @param groupName      文件在FastDFS中的组名
         * @param remoteFilename 文件在FastDFS中的名称
         */
        public static void deleteFile(String localFilename, String groupName, String remoteFilename) {
            TrackerServer trackerServer;
            try {
                trackerServer = trackerClient.getConnection();
            } catch (IOException e) {
                logger.error("error", e);
                return;
            }
            StorageClient storageClient = new StorageClient(trackerServer, null);
            try {
                int i = storageClient.delete_file(groupName, remoteFilename);
                if (i == 0) {
                    logger.info("FastDFS删除文件成功");
                } else {
                    logger.info("FastDFS删除文件失败");
                }
            } catch (IOException | MyException e) {
                logger.error("error", e);
            } finally {
                closeTrackerServer(trackerServer);
            }
        }
     
        private static void closeTrackerServer(TrackerServer trackerServer) {
            try {
                if (trackerServer != null) {
                    logger.info("关闭trackerServer连接");
                    trackerServer.close();
                }
            } catch (IOException e) {
                logger.error("error", e);
            }
        }
    }
    View Code

    代码2:

    package com.sunward.car.util;
    
    import org.apache.commons.io.IOUtils;
    import org.csource.common.NameValuePair;
    import org.csource.fastdfs.*;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.stereotype.Component;
    import javax.net.ssl.HttpsURLConnection;
    import java.io.*;
    import java.net.InetSocketAddress;
    import java.net.URL;
    import java.util.Iterator;
    import java.util.Map;
    import java.util.UUID;
    
    /**
     * @author chong.zuo
     * @date 2021/5/19 22:34
     */
    @Component
    public class FastDFSClient {
    
        private static final Logger LOG = LoggerFactory.getLogger(FastDFSClient.class);
        private static final String GROUP_NAME = "market1";
        private static StorageClient storageClient;
    
        private static String trackerServerIP;
        @Value("${fastdfs.tracker_server}")
        public void setTrackerServerIP(String tracker_server) {
            trackerServerIP = tracker_server;
        }
    
        private static int trackerServerPort;
        @Value("${fastdfs.port}")
        public void setPort(int port) { trackerServerPort = port; }
    
        private static int connectTimeout;
        @Value("${fastdfs.connect_timeout}")
        public void setConnectTimeout(int connect_timeout) { connectTimeout = connect_timeout; }
    
        private static int networkTimeout;
        @Value("${fastdfs.network_timeout}")
        public void setNetworkTimeout(int network_timeout) { networkTimeout = network_timeout; }
    
        private static String charsetStr;
        @Value("${fastdfs.charset}")
        public void setCharsetStr(String charset) { charsetStr = charset; }
    
        private static String secretkey;
        @Value("${fastdfs.http.secret_key}")
        public void setSecretkey(String secret_key) { secretkey = secret_key; }
    
        private static int trackerHttpPort;
        @Value("${fastdfs.http.tracker_http_port}")
        public void setTrackerHttpPort(int tracker_http_port) { trackerHttpPort = tracker_http_port; }
    
        /**
         * 初始化fastdfs客户端
         * @return
         * @throws IOException
         */
        public static StorageClient initClient() throws IOException {
            ClientGlobal.setG_connect_timeout(connectTimeout);
            ClientGlobal.setG_network_timeout(networkTimeout);
            ClientGlobal.setG_anti_steal_token(false);
            ClientGlobal.setG_charset(charsetStr);
            ClientGlobal.setG_secret_key(null);
            ClientGlobal.setG_tracker_http_port(trackerHttpPort);
            InetSocketAddress[] tracker_servers = new InetSocketAddress[1];
            tracker_servers[0] = new InetSocketAddress(trackerServerIP, trackerServerPort);
            ClientGlobal.setG_tracker_group(new TrackerGroup(tracker_servers));
            TrackerClient trackerClient = new TrackerClient(ClientGlobal.g_tracker_group);
            TrackerServer trackerServer = trackerClient.getConnection();
            StorageServer storageServer = trackerClient.getStoreStorage(trackerServer);
            return new StorageClient(trackerServer, storageServer);
        }
    
        /**
         * 获取StorageClient
         * @return
         */
        public static StorageClient getClient(){
            if(storageClient == null){
                synchronized (FastDFSClient.class){
                    try{
                        if(storageClient==null){
                            storageClient = initClient();
                        }
                    }catch (Exception e){
                        LOG.error("storageClient创建失败...." + storageClient,e);
                    }
                }
            }
            return storageClient;
        }
    
        /**
         * 上传文件
         * @param file
         * @param fileName
         * @param metaList
         * @return
         */
        public static  String[] uploadFile(StorageClient client, 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 client.upload_file(GROUP_NAME,buff,fileName,nameValuePairs);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    
        /**
         * 将网络地址图片上传至fastdfs
         * @param urlString
         * @return
         * @throws Exception
         */
        public  static String uploadFileByUrl(StorageClient client, String urlString) throws Exception{
            URL url = new URL(urlString);
            FileOutputStream fos = null;
            HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
            conn.setHostnameVerifier(new TrustAnyHostnameVerifier());
            conn.connect();
            File file = File.createTempFile(UUID.randomUUID().toString().replace("-",""), ".jpg");
            fos = new FileOutputStream(file);
            BufferedInputStream bis =new BufferedInputStream(conn.getInputStream());
            byte[] data = new byte[2048];
            int len = 0;
            int sum = 0;
            while ((len = bis.read(data)) != -1) {
                fos.write(data, 0, len);
            }
            //FastDFSClient client = new FastDFSClient();
    
            String[] result = FastDFSClient.uploadFile(client, file, "jpg",null);
    
            fos.flush();
            fos.close();
            bis.close();
            conn.disconnect();
            //http://192.168.126.110/group1/M00/00/00/wKh-bmCgvm2AVJItAAMDpg8cMaY364.jpg
            return "http://"+trackerServerIP.split(":")[0]+"/"+result[0]+"/"+result[1];
        }
    
        /**
         * 删除文件
         * @param storageClient
         * @param groupname
         * @param fileId 文件ID(上传文件成功后返回的ID)
         * @return
         */
        public int deleteFile(StorageClient storageClient, String groupname,String fileId) {
            try {
                return storageClient.delete_file(groupname,fileId);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return -1;
        }
    
        /**
         * 下载文件
         * @param fileId 文件ID(上传文件成功后返回的ID)
         * @param outFile 文件下载保存位置
         * @return
         */
        public  int downloadFile(StorageClient storageClient, String groupName,String fileId, File outFile) {
            FileOutputStream fos = null;
            try {
                byte[] content = storageClient.download_file(groupName,fileId);
                fos = new FileOutputStream(outFile);
                InputStream ips = new ByteArrayInputStream(content);
                IOUtils.copy(ips,fos);
                return 0;
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (fos != null) {
                    try {
                        fos.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
            return -1;
        }
    
    }
    View Code
  • 相关阅读:
    ubuntu的php7与apache2的环境搭建
    git服务器搭建post-receive 钩子部署服务端代码
    node redis安装与使用
    微信小程序坑集
    微信小程序登录
    mobx react
    react-native-router-flux 下部导航
    java
    java
    java
  • 原文地址:https://www.cnblogs.com/chong-zuo3322/p/14787462.html
Copyright © 2011-2022 走看看