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地址即可查看文件。
注:需要源码的可以留言。到时候私发给您