一,代码

gradle依赖

排除logbackcompile ('com.github.tobato:fastdfs-client:1.26.2'){exclude group: 'ch.qos.logback', module: '*'
}

配置类

/*** <pre>*  将FastDFS-Client客户端引入本地* </pre>** @author shenke* @version $Id: AddressController.java, v 0.1 2019年7月18日 上午18:51:39 shenke Exp $*/
@Configuration
@Import(FdfsClientConfig.class)
// 解决jmx重复注册bean的问题
@EnableMBeanExport(registration = RegistrationPolicy.IGNORE_EXISTING)
public class ComponetImport {
}

Controller

/*** <pre>*  fastDFS文件上传下载* </pre>** @author shenke* @version $Id: AddressController.java, v 0.1 2019年5月08日 上午9:51:39 shenke Exp $*/
@RestController
@RequestMapping("/csms/sales/fastDFS")
public class FastDFSController {private Logger logger = LoggerFactory.getLogger(PlanController.class);@Autowiredprivate FastDFSService fastDFSService;/*** 上传文件** @param files* @return*/@RequestMapping(value = "/upload", method = RequestMethod.POST)@LoggerManage(description = "上传文件")public BaseResponseModel<Object> uploadFile(@RequestPart("files") MultipartFile[] files) {BaseResponseModel<Object> response = new BaseResponseModel<>();try {String url = fastDFSService.uploadFile(files);response.setRepData(url);} catch (Exception e) {e.printStackTrace();response.setRepCode(RespCode.ACT_EXCEPTION);response.setRepMsg(RespMsg.ACT_EXCEPTION_MSG);}return response;}/*** 文件下载** @param fileUrl  url 开头从组名开始* @param response* @throws Exception*/@RequestMapping("/download")public void download(@RequestParam("fileUrl") String fileUrl, HttpServletResponse response) throws Exception {byte[] data = fastDFSService.downloadFile(fileUrl);response.setCharacterEncoding("UTF-8");response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode("test.jpg", "UTF-8"));// 写出ServletOutputStream outputStream = response.getOutputStream();IOUtils.write(data, outputStream);}/*** 删除文件* 示例:group1/M00/00/00/wKj0gl02aeqAKqoAAABWsOuJo1w347.jpg* @param fileUrl* @return*/@RequestMapping(value = "/deleteFile", method = RequestMethod.POST)@LoggerManage(description = "删除文件")public BaseResponseModel<Object> deleteFile(@RequestParam("fileUrl") String fileUrl) {BaseResponseModel<Object> response = new BaseResponseModel<>();try {fastDFSService.deleteFile(fileUrl);} catch (Exception e) {e.printStackTrace();response.setRepCode(RespCode.ACT_EXCEPTION);response.setRepMsg(RespMsg.ACT_EXCEPTION_MSG);}return response;}/*** 获取文件信息*  示例入参:groupName:group1,path:M00/00/00/wKj0gl0xijOABpueAABlGHvbGSg492.jpg* @param groupName* @param fileUrl* @return*/@RequestMapping(value = "/getFile", method = RequestMethod.POST)@LoggerManage(description = "获取文件信息")public BaseResponseModel<Object> getFile(@RequestParam("groupName") String groupName, @RequestParam("fileUrl") String fileUrl) {BaseResponseModel<Object> response = new BaseResponseModel<>();try {fastDFSService.getFile(groupName, fileUrl);} catch (Exception e) {e.printStackTrace();response.setRepCode(RespCode.ACT_EXCEPTION);response.setRepMsg(RespMsg.ACT_EXCEPTION_MSG);}return response;}/*** 获取文件元信息** @param groupName* @param fileUrl* @return*/@RequestMapping(value = "/getMetadata", method = RequestMethod.POST)@LoggerManage(description = "获取文件元信息")public BaseResponseModel<Object> getMetadata(@RequestParam("groupName") String groupName, @RequestParam("fileUrl") String fileUrl) {BaseResponseModel<Object> response = new BaseResponseModel<>();try {fastDFSService.getMetadata(groupName, fileUrl);} catch (Exception e) {e.printStackTrace();response.setRepCode(RespCode.ACT_EXCEPTION);response.setRepMsg(RespMsg.ACT_EXCEPTION_MSG);}return response;}/*** 上传文件并生成缩略图** @param files* @return*/@RequestMapping(value = "/uploadImageAndCrtThumbImage", method = RequestMethod.POST)@LoggerManage(description = "上传文件并生成缩略图")public BaseResponseModel<Object> uploadImageAndCrtThumbImage(@RequestPart("files") MultipartFile[] files) {BaseResponseModel<Object> response = new BaseResponseModel<>();try {String url = fastDFSService.uploadImageAndCrtThumbImage(files);response.setRepData(url);} catch (Exception e) {e.printStackTrace();response.setRepCode(RespCode.ACT_EXCEPTION);response.setRepMsg(RespMsg.ACT_EXCEPTION_MSG);}return response;}}

Service

@Service
public class FastDFSServiceImpl implements FastDFSService {private static Logger logger = LoggerFactory.getLogger(FastDFSServiceImpl.class);@Autowiredprivate FastDFSClientWrapper dfsClient;@Overridepublic String uploadFile(MultipartFile[] multipartFiles) {String url = "";for (MultipartFile file : multipartFiles) {try {url = dfsClient.uploadFile(file);logger.info("上传文件名{},返回地址{}", file.getOriginalFilename(), url);} catch (IOException e) {e.printStackTrace();}}return url;}@Overridepublic byte[] downloadFile(String fileUrl) {logger.info("图片地址{}", fileUrl);byte[] bytes = null;try {bytes = dfsClient.downloadFile(fileUrl);} catch (IOException e) {e.printStackTrace();}return bytes;}@Overridepublic void deleteFile(String fileUrl) {try {dfsClient.deleteFile(fileUrl);} catch (Exception e) {e.printStackTrace();}}@Overridepublic FileInfo getFile(String groupName, String path) {FileInfo fileInfo = new FileInfo();try {fileInfo = dfsClient.getFile(groupName, path);} catch (Exception e) {e.printStackTrace();}return fileInfo;}@Overridepublic Set<MataData> getMetadata(String groupName, String path) {Set<MataData> mataData = new HashSet<>();try {mataData = dfsClient.getMetadata(groupName, path);} catch (Exception e) {e.printStackTrace();}return mataData;}@Overridepublic String uploadImageAndCrtThumbImage(MultipartFile[] multipartFiles) {String url = "";for (MultipartFile file : multipartFiles) {try {url = dfsClient.uploadImageAndCrtThumbImage(file);logger.info("上传文件名{},返回地址{}", file.getOriginalFilename(), url);} catch (IOException e) {e.printStackTrace();}}return url;}
}

工具类

@Component
public class FastDFSClientWrapper {private final Logger logger = LoggerFactory.getLogger(FastDFSClientWrapper.class);@Autowiredprivate FastFileStorageClient storageClient;@Autowiredprivate FdfsWebServer fdfsWebServer;/*    @Autowiredprivate AppConfig appConfig;   // 项目参数配置*//*** 上传文件** @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 content       文件内容* @param fileExtension* @return*/public String uploadFile(String content, String fileExtension) {byte[] buff = content.getBytes(Charset.forName("UTF-8"));ByteArrayInputStream stream = new ByteArrayInputStream(buff);StorePath storePath = storageClient.uploadFile(stream, buff.length, fileExtension, null);return getResAccessUrl(storePath);}/*** 删除文件** @param fileUrl 文件访问地址* @return*/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());}}// 封装图片完整URL地址private String getResAccessUrl(StorePath storePath) {String fileUrl = fdfsWebServer.getWebServerUrl() + storePath.getFullPath();String path = storePath.getPath();logger.info("fileUrl:{}", fileUrl);logger.info("path:{}", path);return fileUrl;}/*** 下载文件** @param fileUrl* @return* @throws IOException*/public byte[] downloadFile(String fileUrl) throws IOException {String group = fileUrl.substring(0, fileUrl.indexOf("/"));String path = fileUrl.substring(fileUrl.indexOf("/") + 1);DownloadByteArray downloadByteArray = new DownloadByteArray();byte[] bytes = storageClient.downloadFile(group, path, downloadByteArray);return bytes;}/*** 查看文件的信息** @param groupName* @param path* @return*/public FileInfo getFile(String groupName, String path) {FileInfo fileInfo = null;logger.info("文件信息入参,groupName:{},path:{}", groupName, path);try {fileInfo = storageClient.queryFileInfo(groupName, path);logger.info("文件信息:{}", fileInfo.toString());} catch (Exception e) {logger.error("Non IO Exception: Get File from Fast DFS failed", e);}return fileInfo;}/*** 获取文件元信息** @param groupName* @param path* @return*/public Set<MataData> getMetadata(String groupName, String path) {Set<MataData> mataData = new HashSet<>();try {mataData = storageClient.getMetadata(groupName, path);logger.info("文件元信息:{}", mataData.toArray());} catch (Exception e) {logger.error("Non IO Exception: Get File from Fast DFS failed", e);}return mataData;}/*** 上传图片并且生成缩略图** @param file* @return* @throws IOException*/public String uploadImageAndCrtThumbImage(MultipartFile file) throws IOException {StorePath storePath = storageClient.uploadImageAndCrtThumbImage(file.getInputStream(), file.getSize(), FilenameUtils.getExtension(file.getOriginalFilename()), null);return getResAccessUrl(storePath);}}

二,测试

1,上传

2,下载

注意:入参url,就是上传返回的地址,没后ip啥的

3,获取文件信息(url中不包含group)

 4,上传缩略图

返回的地址并不是缩略图地址,而是原图地址

5,获取元信息

未执行成功:报错未找到节点,原因未知

springboot集成fastDFS文件上传下载相关推荐

  1. springboot:实现文件上传下载实时进度条功能【附带源码】

    0. 引言 记得刚入行的时候,做了一个文件上传的功能,因为上传时间较久,为了用户友好性,想要添加一个实时进度条,显示进度.奈何当时技术有限,查了许久也没用找到解决方案,最后不了了之. 近来偶然想到这个 ...

  2. SpringBoot(FastDFS文件上传)

    FastDFS 相关概念 FastDFS 服务端有三个⻆色:跟踪服务器(Tracker Server).存储服务器(Storage Server)和客户端(Client). Tracker Serve ...

  3. springboot集成阿里OSS上传文件

    开发前的准备: 自己在阿里云上申请免费的Oss对象存储,新建Bucket---读写权限选择公共读,我开始这里忘了导致后来踩了小坑 接下来是代码中的一些配置:我用的是springboot 1>添加 ...

  4. java批量上传文件_Spring Boot2(十四):单文件上传/下载,文件批量上传

    文件上传和下载在项目中经常用到,这里主要学习SpringBoot完成单个文件上传/下载,批量文件上传的场景应用.结合mysql数据库.jpa数据层操作.thymeleaf页面模板. 一.准备 添加ma ...

  5. springboot文件上传下载实战 ——文件上传、下载、在线打开、删除

    springboot文件上传下载实战 文件上传 文件上传核心 UserFileController 文件上传测试 文件下载与在线打开 文件下载.在线打开核心 UserFileController 文件 ...

  6. springboot文件上传下载实战 —— 登录功能、展示所有文件

    springboot文件上传下载实战 创建项目 pom.xml 数据库建表与环境准备 建表SQL 配置文件 application.properties 整体架构 前端页面 登录页面 login.ht ...

  7. FastDFS实现文件上传下载实战

    正好,淘淘商城讲这一块的时候,我又想起来当时老徐让我写过一个关于实现FastDFS实现文件上传下载的使用文档,当时结合我们的ITOO的视频系统和毕业论文系统,整理了一下,有根据网上查到的知识,总结了一 ...

  8. 基于华为云obs实现文件上传下载(技术栈mysql+springboot+Maven+jsp+java)的技术分享

    基于华为云obs实现文件上传下载(技术栈mysql+springboot+jsp+java)的技术分享 obs实现文件上传下载 前言 一.OBS是什么? 二.使用步骤 1.1 前期准备 2 工具的内容 ...

  9. SpringBoot文件上传下载以及优化过程 -- 个人笔记

    Java IO/NIO/AIO的知识体系图 博主最开始是用IO实现文件上传下载功能,但发现效率慢,于是使用了NIO 新的输入/输出 (NIO) 库是在 JDK 1.4 中引入的,弥补了原来的 I/O ...

  10. 文件上传下载导入导出

    ps: 代码已提交到gitee: https://gitee.com/Lazy_001/file-demo 文件上传下载导入导出 一.首先完成准备工作 1. 创建一个Springboot项目 < ...

最新文章

  1. Ubuntu12.04 安装 mongodb
  2. python excel 自动化-简直出神入化,教你用Python控制Excel实现自动化办公
  3. python同时发大量请求_python http服务器,多个同时请求
  4. python文件操作的方法_Python文件常用操作方法
  5. java list分批_Java实用笔记——mybatis批量导入
  6. matlab freqs函数用法,Matlab freqs 函数
  7. Windows Mobile入门
  8. MATLAB画图详细教程
  9. Multisim10~14软件包及安装手册+pojie软件
  10. docker部署案例
  11. 环境影响评价概论期末试题重点考点
  12. 中级微观经济学 复习框架思维导图-平狄克
  13. 天耀18期 -09.数组-排序【作业】.doc
  14. 小知识:peg改性(PEG-Ara-C阿糖胞苷/Scu灯盏乙素/Flud氟达拉滨)后的新变化
  15. Java工程师通宵都要看完这几本阿里P8都强烈推荐的Java电子书
  16. Linux命令查询服务器名称和型号
  17. 快手智能处理与编码算法产品化之路
  18. 3 WebDriver 和 WebDriver 父类
  19. vue调用阿里云无痕验证
  20. 超文本标记语言主要通过Html,11.HTML中文译为“超文本标记语言”,主要是通过HTML标记对网页中的( )等内容进行描述。...

热门文章

  1. 分享一个Winform里面的HTML编辑控件Zeta HTML Edit Control,汉化附源码
  2. MVC3升级到MVC4模型验证信息显示为英文问题及解决方案
  3. 如何安装ArchLinux
  4. SQL 2008 群集配置详尽攻略[3]—主节点备节点数据库安装
  5. 图解 | 深入揭秘 epoll 是如何实现 IO 多路复用的!
  6. opencv函数介绍—normalize
  7. OpenCV---圆检测
  8. Android下USB的虚拟串口功能
  9. 第十二章 trie路由--基于Linux3.10
  10. FFmpeg滤镜代码级分析