SpringMVC配置fastDFS

简介: SpringMVC配置fastDFS

 springBoot项目配置fastDFS达到上传、下载资源的教程有很多,也非常方便直接用maven引jar包就可以。针对SpringMVC项目的教程基本上都要单独下载jar包,因为maven远程仓库上没有,在github上找到了我要的jar包。


下载jar包:https://download.csdn.net/download/CharmaineXia/87130424


废话不多说,直接放代码。

fdfs_client.properties:

groupName=group11     #组名
tracker_ip=d-fastdfs.dmsd.tech    #服务器地址名
connect_timeout = 30
network_timeout = 30
charset = UTF-8
http.tracker_http_port = 8080
http.anti_steal_token = no
http.secret_key = FastDFS1234567890
tracker_server = 192.168.60.59:22122   #地址名+端口号

applicationContext.xml:

    <!--加载fastDFS配置文件-->
    <context:property-placeholder location="classpath:fdfs_client.properties"/>

上传文件:

public class FileUploadServiceImpl implements FileUploadService {
    // 获取配置文件中的配置IP地址
    private String realIp=CONFIGUREIP_STRING;
    // 获取配置文件中的配置分组
    private String group=CONFIGUREIP_STRING;
    private StorageClient1 storageClient1 = null;
    /**
     * @description:初始化仓库客户端对象
     * @author: xiashiman
     * @date: 2022-11-01 16:48
     **/
    private void initStorageClient1(){
        try {
            String classPath = new File(FileUploadServiceImpl.class.getResource("/").getFile()).getCanonicalPath();
            log.info("classPath的值是“”“”“”"+classPath);
            String confFileName = classPath +File.separator+ "fdfs_client.properties"; //获取配置文件路径
            log.info("=== 配置文件的路径是:" + confFileName);
            ClientGlobal.init(confFileName);  //初始化全局客户端?
            TrackerClient trackerClient = new TrackerClient(ClientGlobal.g_tracker_group); //实例化追踪器客户端
            TrackerServer trackerServer = trackerClient.getConnection(); //连接fastdfs服务器
            if (trackerServer == null) {
                log.error("getConnection fastDFS return null");
            }
            StorageServer storageServer = trackerClient.getStoreStorage(trackerServer); //连接成功,找到合适的存储器
            if (storageServer == null) {
                log.error("getStoreStorage fastDFS return null");
            }
            storageClient1 = new StorageClient1(trackerServer, storageServer); //实例化存储器客户端
        } catch (Exception e) {
            log.error("连接fastDFS服务器发生了异常",e);
        }
    }
    /**
     * @description:上传文件
     * @author: xiashiman
     * @date: 2022-11-01 14:34
     * @param: [fis, fileName]
     * @return:文件网络链接
     **/
    private String uploadFile(InputStream fis, String fileName) {
        try {
            // 文件信息校验
            if (null==fis||fileName.isEmpty()) {
                log.debug("需要上传的文件信息不通过");
                return null;
            }
            NameValuePair[] meta_list = null; // new NameValuePair[0];
            byte[] file_buff = null;
            if (fis != null) {
                int len = fis.available();
                file_buff = new byte[len];
                fis.read(file_buff);
            }
            String fileid = storageClient1.upload_file1(group,file_buff, getFileExt(fileName), meta_list);
            log.info("文件上传成功,fileid是:" + fileid);
            // 获取附件的完整地址
            String Path = "http"+":"+ "//"+ realIp +"/"+fileid;
            log.info("文件上传成功,文件地址:" + Path);
            return Path;
        } catch (Exception ex) {
            log.error("上传文件到fastDFS异常:",ex);
            return null;
        }finally{
            if (fis != null){
                try {
                    fis.close(); //关闭链接
                } catch (IOException e) {
                    log.error("输入流关闭异常:"+e);
                }
            }
        }
    }
    /**
     * 文件上传
     * @param file MultipartFile类型
     * @return url
     */
    @Override
    public String fileUpload(MultipartFile file) throws Exception {
        try {
            this.initStorageClient1();//初始化仓库客户端
            return this.uploadFile(file.getInputStream(),file.getOriginalFilename()); //调用上传文件方法
        } catch (Exception e) {
            log.error("文件上传发生了异常",e);
        }
        throw new Exception();
    }
}

其他文件操作:

    /**
     * @description:根据组名和远程文件名来删除一个文件
     * @author: xiashiman
     * @date: 2022-11-01 14:40
     * @param: [groupName, fileName]fileName:例如"M00/00/00/wKgxgk5HbLvfP86RAAAAChd9X1Y736.jpg"
     * @return: 0为成功,非0为失败,具体为错误代码
     **/
    private int deleteFile(String groupName, String fileName) {
        try {
            int result = storageClient1.delete_file(group, fileName);
            return result;
        } catch (Exception ex) {
            log.error("删除fastDFS上fileName为 "+fileName+" 的资源文件失败:",ex);
            return ZERO_INT;
        }
    }
    /**
     * @description:根据fileId来删除一个文件
     * @author: xiashiman
     * @date: 2022-11-01 14:41
     * @param: [fileId]例如 group1/M00/00/00/ooYBAFM6MpmAHM91AAAEgdpiRC0012.xml
     * @return: 0为成功,非0为失败,具体为错误代码
     **/
    private int deleteFile(String fileId) {
        try {
            int result = storageClient1.delete_file1(fileId);
            return result;
        } catch (Exception ex) {
            log.error("删除fastDFS上fileId为 "+fileId+" 的资源文件失败:",ex);
            return ZERO_INT;
        }
    }
    /**
     * @description:修改一个已经存在的文件
     * @author: xiashiman
     * @date: 2022-11-01 14:43
     * @param: [oldFileId, file, filePath]
     * @param oldFileId:原来旧文件的fileId
     * @param file:新文件
     * @param filePath:新文件路径
     * @return: 返回空则为失败
     **/
    private String modifyFile(String oldFileId, InputStream file, String filePath) {
        String fileid = null;
        try {
            // 先上传
            fileid = uploadFile(file, filePath);
            if (fileid == null) {
                return null;
            }
            // 再删除
            int delResult = deleteFile(oldFileId);
            if (delResult != ZERO_INT) {
                return null;
            }
        } catch (Exception ex) {
            log.error("修改文件fileId为 "+oldFileId+" 异常:",ex);
            return null;
        }
        return fileid;
    }
    /**
     * @description:文件下载
     * @author: xiashiman
     * @date: 2022-11-01 14:47
     * @param: [fileId]
     * @return: 返回一个流
     **/
    private InputStream downloadFile(String fileId) {
        try {
            byte[] bytes = storageClient1.download_file1(fileId);
            InputStream inputStream = new ByteArrayInputStream(bytes);
            return inputStream;
        } catch (Exception ex) {
            log.error("下载文件fileId为"+fileId+"的失败:",ex);
            return null;
        }
    }
    /**
     * @description:获取文件后缀名(不带点).
     * @author: xiashiman
     * @date: 2022-11-01 14:49
     * @param: [fileName]
     * @return: 如:"jpg" or "".
     **/
    private String getFileExt(String fileName) {
        if (StringUtils.isBlank(fileName) || !fileName.contains(".")) {
            return "";
        } else {
            return fileName.substring(fileName.lastIndexOf(".") + ONE_INT); // 不带最后的点
        }
    }
相关文章
|
6月前
|
Java
springboot整合fastdfs、启动不成功
springboot整合fastdfs、启动不成功
49 0
|
6月前
|
存储 负载均衡 容灾
Fastdfs安装与配置
Fastdfs安装与配置
|
前端开发 Java Spring
SpringMvc--文件上传下载
SpringMvc--文件上传下载
47 0
|
存储 编解码 前端开发
SpringBoot整合FastDFS实现图片的上传
  文件的上传和预览在web开发领域是随处可见,存储的方式有很多,本文采用阿里巴巴余庆大神开发的FastDFS进行文件的存储,FastDFS是一个分布式文件存储系统,可以看我上一篇博文,有安装和配置教程。
160 0
|
存储 负载均衡 Java
SpringBoot集成FastDFS
FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。 FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。
|
Java Maven
10、SpringBoot2.0集成FastDFS(十)
前言:由于本篇博客是建立在上一个博客上写的,所以阅读本篇博客之前需要先看下文件上传功能的实现https://blog.csdn.net/yang_guang3/article/details/100015770
149 0
10、SpringBoot2.0集成FastDFS(十)
|
Java 应用服务中间件 开发工具
FastDFS上传文件Demo--springboot实现
FastDFS上传文件Demo--springboot实现
FastDFS上传文件Demo--springboot实现
|
应用服务中间件
享读SpringMVC源码0--从Tomcat到SpringMVC
享读SpringMVC源码0--从Tomcat到SpringMVC
享读SpringMVC源码0--从Tomcat到SpringMVC
|
XML Java 数据格式
springmvc使用配置文件
springmvc使用配置文件
113 0
|
存储 监控 Java
在springboot中整合FastDFS+Nginx文件存储服务器(单机版本)进行文件上传操作
FastDFS可以用于存储大量的小文件,比如商城的图片、音频文件等,本文介绍FastDFS+Nginx的安装和整合到Springboot项目中。
1499 0
在springboot中整合FastDFS+Nginx文件存储服务器(单机版本)进行文件上传操作