java 集成fastdfs上传图片

FastDFS简介

FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。
FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。

图片上传在公司项目中时刻可以看到,然而图片的存储位置需要合理的设置,fastdfs帮我们解决了这个问题。本文主要讲述java集成fastdfs,fastdfs搭建直接按照该网址搭建https://www.cnblogs.com/chiangchou/p/fastdfs.html

公司集成的fastdfs需要的配置

#多个trackerServer用逗号隔开,图片上传的服务地址
fastdfs.trackerServers=192.168.1.31:22122
#图片上传后访问的地址
fastdfs.url=http://192.168.1.30

集成fastdfs需要的依赖

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

fastdfs核心类是StorageClient,上传下载都是StorageClient的方法完成,因此获取StorageClient的实例对象是第一步。

   private StorageClient getClient() {

        Map<String, Object> data = createClient(true);
        StorageClient client = (StorageClient) data.get("client");
        return client;
    }
    /**
     * 根据参数创建StorageClient对象
     *
     * @param isClient 需要实例化的StorageClient类型
     */
    private Map<String, Object> createClient(boolean isClient) {
        try {
//            ClientGlobal.init(conf_filename);
            //获取配置中fastdfs上传服务节点
            String servers = FileConfig.getConfig("fastdfs.trackerServers");
            ClientGlobal.initByTrackers(servers);
            Map<String, Object> data = new HashedMap();
            TrackerClient tracker = new TrackerClient();
            TrackerServer trackerServer = tracker.getConnection();
            StorageServer storageServer = null;
            if (isClient) {
                StorageClient client = new StorageClient(trackerServer, storageServer);
                data.put("client", client);
            }
            return data;

        } catch (IOException e) {
            e.printStackTrace();
        } catch (MyException e) {
            e.printStackTrace();
        }
        return null;

    }

获取了client对象,直接调用client的方法即可实现文件上传

    /**
     * 根据带路径文件名上传文件
     *
     * @param fileBytes 文件二进制流
     * @param fileName  文件名
     */
    public String[] upload(byte[] fileBytes, String fileName) {
        String[] fileIds = uploadFile(fileBytes, fileName, true);
        return fileIds;
    }

    private String[] uploadFile(byte[] fileBytes, String fileName, boolean isBytes) {
        try {
            StorageClient client = getClient();
            String[] arr = fileName.split("\\.");//文件都是xxx.xxx的格式
            if (arr.length < 2) {
                return null;
            }
            String[] fileIds = null;
            if (isBytes) {
                fileIds = client.upload_file(fileBytes, arr[arr.length - 1], null);
            } else {
                fileIds = client.upload_file(fileName, arr[arr.length - 1], null);
            }
            return fileIds;

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (MyException e) {
            e.printStackTrace();
        }
        return null;
    }

如此就完成了文件上传的功能,如果需要文件上传直接调用文件上传功能就可以了,上传后的文件访问地址:

    /**
     * 根据文件名获取文件访问地址
     */
    public static String getFileUrl(String filePath) {
        String url = FileConfig.getConfig("fastdfs.url");
        return url + filePath;
    }

猜你喜欢

转载自blog.csdn.net/weixin_40087279/article/details/81297860