zoukankan      html  css  js  c++  java
  • springboot整合FastDfs文件服务器

    搭建FastDfs文件服务器:搭建FastDfs文件服务器

    1. 导入依赖包
            <dependency>
                <groupId>com.github.tobato</groupId>
                <artifactId>fastdfs-client</artifactId>
                <version>1.27.2</version>
            </dependency>
    
    1. FastDfs配置类
    @Configuration
    @Import(FdfsClientConfig.class) // 导入FastDFS-Client组件
    @EnableMBeanExport(registration = RegistrationPolicy.IGNORE_EXISTING) // 解决jmx重复注册bean的问题
    public class FdfsConfiguration {
    }
    
    1. 在application.yml文件中配置参数
    ip: 192.168.11.12  #这只是一个例子,根据自己的ip进行更改
    
    # 分布式文件系统FDFS配置
    fdfs:
      soTimeout: 1500 #socket连接超时时长
      connectTimeout: 600 #连接tracker服务器超时时长
      trackerList: #TrackerList参数,支持多个,我这里只有一个,如果有多个在下方加- x.x.x.x:port
        - ${ip}:22122
      web-server-url: http://${ip}:7003/ #FDFS中的nginx的ip和port
    
    1. 编写FDFS工具类
    @Component
    public class FastDfsUtil {
        @Autowired
        private FastFileStorageClient fastFileStorageClient;
        @Autowired
        private FdfsWebServer fdfsWebServer;
    
        public String uploadFile(MultipartFile file) throws IOException {
            StorePath storePath = fastFileStorageClient.uploadFile(file.getInputStream(), file.getSize(), FilenameUtils.getExtension(file.getOriginalFilename()), null);
            String fullPath = storePath.getFullPath();
            getResAccessUrl(fullPath);
            return fullPath;
    
        }
    
        public String uploadFile(File file) {
            try {
                FileInputStream inputStream = new FileInputStream(file);
                StorePath storePath = fastFileStorageClient.uploadFile(inputStream, file.length(), FilenameUtils.getExtension(file.getName()), null);
                return storePath.getFullPath();
            } catch (Exception e) {
                e.printStackTrace();
                return null;
            }
        }
    
        public byte[] downloadFile(String filePath) {
            StorePath storePath = StorePath.parseFromUrl(filePath);
            byte[] bytes = fastFileStorageClient.downloadFile(storePath.getGroup(), storePath.getPath(), new DownloadByteArray());
            return bytes;
        }
    
        public Boolean deleteFile(String filePath) {
            if (StringUtils.isEmpty(filePath)) {
                return false;
            }
            try {
                StorePath storePath = StorePath.parseFromUrl(filePath);
                fastFileStorageClient.deleteFile(storePath.getGroup(), storePath.getPath());
            } catch (Exception e) {
                e.printStackTrace();
                return false;
            }
            return true;
        }
    
        // 封装文件完整URL地址
        public String getResAccessUrl(String path) {
            String url = fdfsWebServer.getWebServerUrl() + path;
            System.out.println("上传文件地址为:
    " + url);
            return url;
        }
    }
    
    1. 编写Controller进行测试
    @RestController
    @RequestMapping("/fastDfs")
    public class FastDfsController {
        @Autowired
        private FastDfsUtil fastDfsUtil;
    
        @PostMapping("/upload")
        public void uploadFile(MultipartFile file) throws IOException {
            String s = fastDfsUtil.uploadFile(file);
            String resAccessUrl = fastDfsUtil.getResAccessUrl(s);
        }
    
        @GetMapping("/download")
        public void downloadFile(String filePath, HttpServletResponse response) throws IOException {
            byte[] bytes = fastDfsUtil.downloadFile(filePath);
            String fileName = "哈哈.jpg";
            response.setContentType("application/force-download");// 设置强制下载不打开
            //方式一
            // fileName=new String(fileName.getBytes(), "ISO8859-1")
            //方式二
            fileName = URLEncoder.encode(fileName, "utf-8");
            response.setHeader("Content-disposition", "attachment;filename=" + fileName);
            IOUtils.write(bytes, response.getOutputStream());
        }
    
        /**
         * 流媒体的方式播放视频,只能从头看到尾,不能手动点击重新看已经看过的内容
         * @param filePath
         * @param response
         * @throws IOException
         */
        @GetMapping("/play")
        public void streamMedia(String filePath, HttpServletResponse response) throws IOException {
            byte[] bytes = fastDfsUtil.downloadFile(filePath);
            IOUtils.copy(new ByteArrayInputStream(bytes), response.getOutputStream());
            response.flushBuffer();
        }
    
        @GetMapping("/delete")
        public void deleteFile(String filePath) {
            Boolean result = fastDfsUtil.deleteFile(filePath);
        }
    }
    
  • 相关阅读:
    yum error
    Linux如何查询内存真实利用率
    管理工作
    top 详解
    炒股
    vsftp+apache中文乱码问题
    生活像杯咖啡
    vmware workstation 9 nat setting
    cp文件
    WPF 数据分页控件改进
  • 原文地址:https://www.cnblogs.com/yloved/p/12649809.html
Copyright © 2011-2022 走看看