spring boot文件的上传与下载
1.添加依赖:
<dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.6</version>
</dependency>
2.配置文件上传目录和访问前缀:
// application.yml 文件
# 文件上传下载相关配置
file:path:upload: D:/qcby/ #文件上传存储位置,不存在会自动创建prefix: /filePrefix/ #必须 / 结尾
3.配置映射关系
// WebMvcConfig.java 文件
/*** @Title: addResourceHandlers* @Description: 映射本地磁盘为静态目录* @param: registry* @throws:*/
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry){FileUtil.filePrefix = filePrefix;FileUtil.uploadLocalPath = uploadLocalPath;registry.addResourceHandler(filePrefix +"/**").addResourceLocations("file:"+uploadLocalPath);
}
4.创建一个文件上传工具类
// FileUtil.java 文件
/*** @Title: uploadFile* @Description: 单文件上传到本地磁盘* @param: multipartFile* @return: java.lang.String* @throws:*/
public static String uploadFile(MultipartFile multipartFile){if(multipartFile == null){return null;}//生成文件名称,以免上传相同文件异常String fileName = getUploadFileName(multipartFile.getOriginalFilename());// 获取当前日期String dateDir = DateUtil.format(null,DateUtil.PATTERN_yyyyMMdd);// 如果是今天第一次上传,则生成日期文件夹File destFileDir = new File(uploadLocalPath + File.separator + dateDir);if(!destFileDir.exists()){destFileDir.mkdirs();}try {// 获取上传后文件对象File destFile = new File(destFileDir.getAbsoluteFile()+File.separator+fileName);// 上传文件到磁盘指定位置multipartFile.transferTo(destFile);log.info("文件【"+multipartFile.getOriginalFilename()+"】上传成功");return filePrefix + dateDir+"/"+fileName;} catch (IOException e) {log.error("文件上传异常:"+multipartFile.getOriginalFilename(),e);return null;}
}
5.
(1)上传:
@Controller
@RequestMapping("file")
public class FileController {/*** 上传文件* @param file* @return*/@ResponseBody@RequestMapping("upload")public ResultJson upload(@RequestParam("file") MultipartFile file){if(file == null){return ResultJson.failure(ResultCode.SERVER_ERROR);}Map<String,String> r = new HashMap<>();// 调用上传方法返回可访问的路径String filePath = FileUtil.uploadFile(file);// 上传后的路径r.put("filePath",filePath);// 文件原名r.put("oldName",file.getOriginalFilename());// 文件大小r.put("size",file.getSize()+"");return ResultJson.ok(r);}
}
(2)下载
@Controller
@RequestMapping("file")
public class FileController {@ResponseBody@RequestMapping("downloadByFilePath")public ResponseEntity<byte[]> download(String filePath) throws IOException {if(StringUtils.isEmpty(filePath)){throw new RuntimeException("路径不可为空!");}/*** 获取磁盘路径*/// 获取到文件相对路径String path = filePath.substring(filePath.indexOf(FileUtil.filePrefix)+FileUtil.filePrefix.length()-1);// 磁盘根路径 + 相对路径 获取绝对路径String localPath = FileUtil.uploadLocalPath+path;File file = new File(localPath);if(!file.exists()){throw new RuntimeException("文件不存在!");}HttpHeaders headers = new HttpHeaders();headers.setContentDispositionFormData("attachment",new String(file.getName().getBytes(StandardCharsets.UTF_8), "iso-8859-1"));headers.add("Access-Control-Expose-Headers", "Content-Disposition");headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);// 获取文件的字节数组 - 需要使用commons-io依赖包byte[] content = FileUtils.readFileToByteArray(file);// 返回下载的二进制内容return new ResponseEntity<>(content, headers, HttpStatus.OK);}
}
6.测试:
spring boot文件的上传与下载相关推荐
- Spring Boot接收前端上传的多个文件
Spring Boot接收前端上传的多个文件 突然被问到这个功能,太久没用到这个功能,印象有些模糊,这个文章记录一下. 前端那里会传一个字段和一些文件到后端,然后后端接收保存一下. 代码 可以直接使用 ...
- SpringBoot实现oss文件的上传与下载
SpringBoot实现oss文件的上传与下载 最近项目中需要通过OSS来实现文件的上传和下载以及根据oss文件(word模板)生成Word,特此记录,以便日后查阅. 一.相关概述 OSS对象存储 ...
- SpringMVC实现文件的上传和下载
SpringMVC实现文件的上传和下载http://www.bieryun.com/1120.html 前些天一位江苏经贸的学弟跟我留言问了我这样一个问题:"用什么技术来实现一般网页上文件的 ...
- Akka实战:HTTP大文件断点上传、下载,秒传
2019独角兽企业重金招聘Python工程师标准>>> 访问:https://github.com/yangbajing/scala-applications/tree/master ...
- SpringMVC实现文件的上传与下载
文件的上传与下载可以说是工作中经常使用的功能,现在整理一下,希望能够给大家一个参考.这里以 Maven 的形式来创建项目,相关的配置文件会把主要的内容列出来,其他头文件信息不再一一全部的列出.最后会把 ...
- SpringMVC与JSON传值,取值,使用SpringMVC实现文件的上传与下载,SpringMVC拦截器
一. JSON 1.1 什么是JSON 在实际开发中,通常需要和别的系统交换数据,数据交换的格式通常有XML和JSON等: JSON(JavaScript Object Notation:JavaSc ...
- (十六)admin-boot项目之文件存储上传与下载minio
(十六)文件存储上传与下载 项目地址:https://gitee.com/springzb/admin-boot 如果觉得不错,给个 star 简介: 这是一个基础的企业级基础后端脚手架项目,主要由s ...
- 使用阿里云OSS实现文件的上传、下载、删除及修改功能
一.配置OSS相关配置信息 1.要配置 OSS 相关配置信息,您可以按照以下步骤操作: 登录阿里云控制台,进入 OSS 控制台,创建一个新的 OSS Bucket,并记录下以下信息:Bucket 名称 ...
- 初学Java Web(7)——文件的上传和下载
文件上传 文件上传前的准备 在表单中必须有一个上传的控件 <input type="file" name="testImg"/> 因为 GET 方式 ...
最新文章
- 从团购网的漏洞看网站安全性问题 -- 安全 -- IT技术博客大学习 -- 共学习 共进步!...
- python好用-Python有哪些常见的、好用的爬虫框架?
- 关于Combobox的多选和单选情况
- scrollView的几个属性contentSize contentOffset contentInset
- 分布式系统原理 之9 CAP 理论
- java中如何数组是如何赋值的?
- Taro+react开发(57) 图片引入
- Mybatis(1)---入门篇单表查询
- linux建立ftp suse_suse开通ftp的实例
- iQOO Pro 5G评测:配置彪悍定价亲民 成功拉低5G手机准入门槛
- IEnumerable和使用收益回报的递归
- Bailian4150 上机【DP】
- SQL Server高级查询之常见数据库对象(索引)第五章节
- 在移动端H5开发中(关于安卓端position:fixed和position:absolute;和虚拟键盘冲突的问题,以及解决方案)...
- python语音合成并播放_用Python写一个语音播放软件
- IntelliJ IDEA Dependency 'XXXX' not found 或 java:程序包XXXX不存在,找不到的解决方案
- 自定义ViewPager和RecyclerView指示器 Indicator
- python基础知识下载_python基础知识(实用)
- ETL(kettle)创建工作任务job详解
- 怎么样做能让站点文章收录更快一些呢
热门文章
- RabbitMQ consumer的一些坑
- 对于DOM的attribute和property的一些思考
- Your account has been locked out. Please contact the system administrator for further assistance.
- AJAX for Java简单表数据查询实例
- 安徽50岁计算机职称免考,50岁以上评职称免考外语
- 怎样把计算机放到手机桌面,如何将电脑桌面的文档发送到手机微信
- Spring-tx-Propagation枚举类
- IntelliJ IDEA-遇见的问题总结
- python barh_Python matplotlib.axes.Axes.barh()用法及代码示例
- Go的http库详解