zoukankan      html  css  js  c++  java
  • fastdfs简单使用

    首先安装fastdfs 这里使用docker 简单快捷

    1. docker pull delron/fastdfs 下载最新镜像
    2.docker run -d --network=host --name tracker -v 宿主机目录:/var/fdfs delron/fastdfs tracker 启动tracker服务
    3.docker run -dti --network=host --name storage -e TRACKER_SERVER=宿主机ip地址:22122 -v 宿主机目录:/var/fdfs delron/fastdfs storage 安装storage服务
    4. 8888是默认的nginx代理端口,23000是storage服务端口,22122是tracker服务端口。需要开放这几个端口 由于nginx端口是8888 所以文件上传的访问路径端口也是8888

    接下来就是与spring boot整合

     <dependency>
                <groupId>com.github.tobato</groupId>
                <artifactId>fastdfs-client</artifactId>
                <version>1.27.2</version>
            </dependency>

    maven依赖 然后就是配置文件

    #fastdfs配置
    fdfs:
      #tracker 服务器列表
      tracker-list:
        - 宿主机ip:22122
      #超时时间
      connect-timeout: 600
      #略缩图
      thumb-image:
        height: 150
         150
    spring:
      servlet:
        multipart:
          max-file-size: 10MB #单个文件最大大小
          max-request-size: 100MB #一次请求最大文件大小

    启动类上加一个注解 导入FdfsClientConfig的配置

    @SpringBootApplication
    @Import(FdfsClientConfig.class)
    public class App {
        public static void main(String[] args) {
            SpringApplication.run(App.class,args);
        }
    }

    到这里 配置基本完成了  这个依赖是GitHub上的一个开源项目,详细一些可以去GitHub上搜索

    贴一下service和controller

    /**
     * @Description: 文件上传下载
     * @Author: Tan
     * @CreateDate: 2020/3/31
     **/
    @Service
    public class FileService {
    
        @Autowired
        private FastFileStorageClient storageClient;
    
        @Autowired
        private ThumbImageConfig thumbImageConfig;
    
    
       /**
        * @Description: 文件上传  返回上传完成以后的文件路径
        * @Author: Tan
        * @Date: 2020/3/31
        * @param file: 上传文件对象
        * @return: java.lang.String
        **/
        public String uploadFile(MultipartFile file) throws IOException {
            //参1 文件输入流,参2 文件大小,参3 文件拓展名,参4 元数据集合
            StorePath storePath = storageClient.uploadFile(file.getInputStream(), file.getSize(),
                    FilenameUtils.getExtension(file.getOriginalFilename()), null);
            return storePath.getFullPath();
        }
    
        /**
         * @Description: 上传图片并且创建缩略图
         * @Author: Tan
         * @Date: 2020/3/31
         * @param file: 图片文件对象
         * @return: java.lang.String
         **/
        public  String uploadImageAndCreateThumbImage(MultipartFile file) throws IOException{
            StorePath storePath = storageClient.uploadImageAndCrtThumbImage(file.getInputStream(), file.getSize(),
                    FilenameUtils.getExtension(file.getOriginalFilename()), null);
            return storePath.getFullPath();
        }
    
    
        /**
         * @Description: 根据文件名获取缩略图路径
         * @Author: Tan
         * @Date: 2020/3/31
         * @param filePath: 缩略图路径
         * @return: java.lang.String
         **/
        public String getThumbImagePath(String filePath) {
            return thumbImageConfig.getThumbImagePath(filePath);
        }
    
    
        /**
         * @Description:  根据文件路径进行下载 返回一个byte[]数组 包含文件内容
         * @Author: Tan
         * @Date: 2020/3/31
         * @param filePath: 下载文件路径
         * @return: byte[]
         **/
        public byte[] downFile(String filePath) throws IOException {
            StorePath storePath = StorePath.parseFromUrl(filePath);
            return storageClient.downloadFile(storePath.getGroup(), storePath.getPath(), new DownloadCallback<byte[]>() {
                @Override
                public byte[] recv(InputStream ins) throws IOException {
                    return org.apache.commons.io.IOUtils.toByteArray(ins);
                }
            });
        }
    
    
    
        /**
         * @Description: 根据文件路径 删除文件
         * @Author: Tan
         * @Date: 2020/3/31
         * @param filePath: 文件路径
         * @return: void
         **/
        public void deleteFile(String filePath) {
            StorePath storePath = StorePath.parseFromUrl(filePath);
            storageClient.deleteFile(storePath.getGroup(), storePath.getPath());
    
        }
    
    
    
    }
    @Controller
    public class FileUploadAndDownloadController  {
    
        @Autowired
        private FileService fileService;
    
        @ResponseBody
        @PostMapping("/fileUpload")
        public String fileUpload(MultipartFile multipartFile) throws IOException {
            return  "上传成功 文件地址为:"+ fileService.uploadFile(multipartFile);
        }
    
        @RequestMapping("/downloadFile")
        public void downloadFile(String filePath, HttpServletResponse response) throws IOException {
            response.setContentType("application/octet-stream");
            response.addHeader("Content-Disposition","attachment;filename="+ URLEncoder.encode("中文名.jpg","utf-8"));
            byte[] bytes = fileService.downFile(filePath);
            response.getOutputStream().write(bytes);
        }

    基本使用就是这些

  • 相关阅读:
    力扣(LeetCode)验证回文串 个人题解(C++)
    力扣(LeetCode)平方数之和 个人题解
    Exclusive Access 2 UVA
    C语言中指针*p[N], (*P)[N]的区别
    2018年蓝桥杯国赛比赛心得
    2018acm/icpc西安邀请赛比赛心得
    [最小割]Cable TV Network UVA
    Tree Reconstruction UVA
    Twenty Questions UVA
    python中的enumerate 函数(编号的实现方式)
  • 原文地址:https://www.cnblogs.com/java888/p/12607401.html
Copyright © 2011-2022 走看看