springboot集成fastDFS文件上传下载
一,代码
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文件上传下载相关推荐
- springboot:实现文件上传下载实时进度条功能【附带源码】
0. 引言 记得刚入行的时候,做了一个文件上传的功能,因为上传时间较久,为了用户友好性,想要添加一个实时进度条,显示进度.奈何当时技术有限,查了许久也没用找到解决方案,最后不了了之. 近来偶然想到这个 ...
- SpringBoot(FastDFS文件上传)
FastDFS 相关概念 FastDFS 服务端有三个⻆色:跟踪服务器(Tracker Server).存储服务器(Storage Server)和客户端(Client). Tracker Serve ...
- springboot集成阿里OSS上传文件
开发前的准备: 自己在阿里云上申请免费的Oss对象存储,新建Bucket---读写权限选择公共读,我开始这里忘了导致后来踩了小坑 接下来是代码中的一些配置:我用的是springboot 1>添加 ...
- java批量上传文件_Spring Boot2(十四):单文件上传/下载,文件批量上传
文件上传和下载在项目中经常用到,这里主要学习SpringBoot完成单个文件上传/下载,批量文件上传的场景应用.结合mysql数据库.jpa数据层操作.thymeleaf页面模板. 一.准备 添加ma ...
- springboot文件上传下载实战 ——文件上传、下载、在线打开、删除
springboot文件上传下载实战 文件上传 文件上传核心 UserFileController 文件上传测试 文件下载与在线打开 文件下载.在线打开核心 UserFileController 文件 ...
- springboot文件上传下载实战 —— 登录功能、展示所有文件
springboot文件上传下载实战 创建项目 pom.xml 数据库建表与环境准备 建表SQL 配置文件 application.properties 整体架构 前端页面 登录页面 login.ht ...
- FastDFS实现文件上传下载实战
正好,淘淘商城讲这一块的时候,我又想起来当时老徐让我写过一个关于实现FastDFS实现文件上传下载的使用文档,当时结合我们的ITOO的视频系统和毕业论文系统,整理了一下,有根据网上查到的知识,总结了一 ...
- 基于华为云obs实现文件上传下载(技术栈mysql+springboot+Maven+jsp+java)的技术分享
基于华为云obs实现文件上传下载(技术栈mysql+springboot+jsp+java)的技术分享 obs实现文件上传下载 前言 一.OBS是什么? 二.使用步骤 1.1 前期准备 2 工具的内容 ...
- SpringBoot文件上传下载以及优化过程 -- 个人笔记
Java IO/NIO/AIO的知识体系图 博主最开始是用IO实现文件上传下载功能,但发现效率慢,于是使用了NIO 新的输入/输出 (NIO) 库是在 JDK 1.4 中引入的,弥补了原来的 I/O ...
- 文件上传下载导入导出
ps: 代码已提交到gitee: https://gitee.com/Lazy_001/file-demo 文件上传下载导入导出 一.首先完成准备工作 1. 创建一个Springboot项目 < ...
最新文章
- Ubuntu12.04 安装 mongodb
- python excel 自动化-简直出神入化,教你用Python控制Excel实现自动化办公
- python同时发大量请求_python http服务器,多个同时请求
- python文件操作的方法_Python文件常用操作方法
- java list分批_Java实用笔记——mybatis批量导入
- matlab freqs函数用法,Matlab freqs 函数
- Windows Mobile入门
- MATLAB画图详细教程
- Multisim10~14软件包及安装手册+pojie软件
- docker部署案例
- 环境影响评价概论期末试题重点考点
- 中级微观经济学 复习框架思维导图-平狄克
- 天耀18期 -09.数组-排序【作业】.doc
- 小知识:peg改性(PEG-Ara-C阿糖胞苷/Scu灯盏乙素/Flud氟达拉滨)后的新变化
- Java工程师通宵都要看完这几本阿里P8都强烈推荐的Java电子书
- Linux命令查询服务器名称和型号
- 快手智能处理与编码算法产品化之路
- 3 WebDriver 和 WebDriver 父类
- vue调用阿里云无痕验证
- 超文本标记语言主要通过Html,11.HTML中文译为“超文本标记语言”,主要是通过HTML标记对网页中的( )等内容进行描述。...