zoukankan      html  css  js  c++  java
  • SpringBoot 集成整合FastDFS 上传文件

    FastDFS  介绍: 

      FastDFS是一款高性能的分布式文件系统。主要功能包括:文件存储,文件同步,文件访问(上传下载)。它可以解决高容量和负载均衡的问题。FastDFS适合用来做文件相关的网站,如图片分享、视频分享等。

      FastDFS是一款开源的轻量级分布式文件系统C实现,支持Linux、FreeBSD等UNIX系统类google FS,不是通用的文件系统,只能通过专有API访问,目前提供了C、Java和PHP API为互联网应用量身定做,解决大容量文件存储问题,追求高性能和高扩展性FastDFS可以看做是基于文件的key value pair存储系统,称作分布式文件存储服务更为合适。

    FastDFS服务端有三个角色:跟踪服务器(tracker server)、存储服务器(storage server)和客户端(client)。

    tracker server

      跟踪服务器,主要做调度工作,起负载均衡的作用。在内存中记录集群中所有存储组和存储服务器的状态信息,是客户端和数据服务器交互的枢纽。相比GFS中的master更为精简,不记录文件索引信息,占用的内存量很少。

    storage server

      存储服务器(又称:存储节点或数据服务器),文件和文件属性(meta data)都保存到存储服务器上。Storage server直接利用OS的文件系统调用管理文件。

    client

      客户端,作为业务请求的发起方,通过专有接口,使用TCP/IP协议与跟踪器服务器或存储节点进行数据交互。FastDFS向使用者提供基本文件访问接口,比如upload、download、append、delete等,以客户端库的方式提供给用户使用。

      pom文件

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

      配置类

    @Component
    public class FdfsConfig {
    
        @Value("${fdfs.resHost}")
        private String resHost;
    
        @Value("${fdfs.storagePort}")
        private String storagePort;
    // 省略setget方法 
     }

      上传方法

    /**
     * MultipartFile类型的文件上传ַ
      * @param file
      * @return
      * @throws IOException
      */
     public String uploadFile(MultipartFile file) throws IOException {
         StorePath storePath = storageClient.uploadFile(file.getInputStream(), file.getSize(),
                 FilenameUtils.getExtension(file.getOriginalFilename()), null);
        return getResAccessUrl(storePath);
    }

      删除文件方法

    /**
      * 删除文件
      * @param fileUrl
      */
     public void deleteFile(String fileUrl) {
         if (StringUtils.isEmpty(fileUrl)) {
            return;
        }
         try {
            StorePath storePath = StorePath.praseFromUrl(fileUrl);
            storageClient.deleteFile(storePath.getGroup(), storePath.getPath());
        } catch (FdfsUnsupportStorePathException e) {
           logger.warn(e.getMessage());
        }
    }

      文件的控制类 FileController

    @Controller
    
    public class FileController {
      @Autowired
      private CommonFileUtil fileUtil;
    
      @Autowired
      private FdfsConfig fdfsConfig;
    
      private final static Logger logger = LoggerFactory.getLogger(FileController.class);
    
    // 跳转上传页面
      @RequestMapping("/goIndex")
      public String goIndex(){
          logger.info("进入主页面");
         return "/file";
      }
    
    // 使用fastdfs进行文件上传
    @RequestMapping("/uploadFileToFast")
    public String uoloadFileToFast(@RequestParam("fileName")MultipartFile file, RedirectAttributes attributes) throws IOException{
    
       if(file.isEmpty()){
            logger.info("文件不存在");
        }
        String path = fileUtil.uploadFile(file);
        String url = fdfsConfig.getResHost()+path;
        attributes.addAttribute("url", url);
        return "redirect:/success";
    }
    
    // 跳转成功页面
    @RequestMapping("/success")
    public String success(HttpServletRequest request){
        request.setAttribute("imgUrl", request.getParameter("url"));
        logger.info(request.getParameter("url"));
       logger.info("进入上传成功页面");
        return "/success";
    }
    }

    测试结果返回文件的路径,需要再加上url地址即可查看文件。

    注:需要源码的可以留言。到时候私发给您

  • 相关阅读:
    【Unity 3D】学习笔记29:游戏的例子——简单的小制作地图
    mysql位_01检查错误代码的方法
    编程获取linuxservercpu、内存和磁盘使用
    poj 2482 Stars in Your Window(扫描线)
    Largest Rectangle in Histogram
    【剑指offer】删除字符也出现在一个字符串
    linux sdio card睡眠治疗 sdio card removed解决方案
    Wooyun
    APT攻击
    Elasticsearch 学习~
  • 原文地址:https://www.cnblogs.com/easyjie/p/14666979.html
Copyright © 2011-2022 走看看