zoukankan      html  css  js  c++  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();
    
        }
    
    }
  • 相关阅读:
    VMware虚拟机下网络配置模式
    2021考研规划(持续更新)
    20210326 名词解释及常用下载地址(持续更新)
    20210326学习笔记1---java及hadoop组件最新版本汇总
    20210326日记
    20210325一天总结--进步最大的一天
    20210325学习感悟--学习是开始几小时烦躁,越学习越上瘾;暴食看剧打游戏打飞机,最开始爽,时间越长越厌倦甚至感觉痛苦。
    20210326继续解决----20210325学习笔记2--运行MapReduce Jar(我为什么这样起标题,因为结构化数据才好搜索)
    20210325学习笔记1--解决了打包不生成jar文件的问题
    20210325日记--加油,相信只要基础够扎实熟练,就能找到转职成功。
  • 原文地址:https://www.cnblogs.com/cac2020/p/9814879.html
Copyright © 2011-2022 走看看