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文件的上传与下载相关推荐

  1. Spring Boot接收前端上传的多个文件

    Spring Boot接收前端上传的多个文件 突然被问到这个功能,太久没用到这个功能,印象有些模糊,这个文章记录一下. 前端那里会传一个字段和一些文件到后端,然后后端接收保存一下. 代码 可以直接使用 ...

  2. SpringBoot实现oss文件的上传与下载

    SpringBoot实现oss文件的上传与下载 最近项目中需要通过OSS来实现文件的上传和下载以及根据oss文件(word模板)生成Word,特此记录,以便日后查阅. 一.相关概述 OSS对象存储   ...

  3. SpringMVC实现文件的上传和下载

    SpringMVC实现文件的上传和下载http://www.bieryun.com/1120.html 前些天一位江苏经贸的学弟跟我留言问了我这样一个问题:"用什么技术来实现一般网页上文件的 ...

  4. Akka实战:HTTP大文件断点上传、下载,秒传

    2019独角兽企业重金招聘Python工程师标准>>> 访问:https://github.com/yangbajing/scala-applications/tree/master ...

  5. SpringMVC实现文件的上传与下载

    文件的上传与下载可以说是工作中经常使用的功能,现在整理一下,希望能够给大家一个参考.这里以 Maven 的形式来创建项目,相关的配置文件会把主要的内容列出来,其他头文件信息不再一一全部的列出.最后会把 ...

  6. SpringMVC与JSON传值,取值,使用SpringMVC实现文件的上传与下载,SpringMVC拦截器

    一. JSON 1.1 什么是JSON 在实际开发中,通常需要和别的系统交换数据,数据交换的格式通常有XML和JSON等: JSON(JavaScript Object Notation:JavaSc ...

  7. (十六)admin-boot项目之文件存储上传与下载minio

    (十六)文件存储上传与下载 项目地址:https://gitee.com/springzb/admin-boot 如果觉得不错,给个 star 简介: 这是一个基础的企业级基础后端脚手架项目,主要由s ...

  8. 使用阿里云OSS实现文件的上传、下载、删除及修改功能

    一.配置OSS相关配置信息 1.要配置 OSS 相关配置信息,您可以按照以下步骤操作: 登录阿里云控制台,进入 OSS 控制台,创建一个新的 OSS Bucket,并记录下以下信息:Bucket 名称 ...

  9. 初学Java Web(7)——文件的上传和下载

    文件上传 文件上传前的准备 在表单中必须有一个上传的控件 <input type="file" name="testImg"/> 因为 GET 方式 ...

最新文章

  1. 从团购网的漏洞看网站安全性问题 -- 安全 -- IT技术博客大学习 -- 共学习 共进步!...
  2. python好用-Python有哪些常见的、好用的爬虫框架?
  3. 关于Combobox的多选和单选情况
  4. scrollView的几个属性contentSize contentOffset contentInset
  5. 分布式系统原理 之9 CAP 理论
  6. java中如何数组是如何赋值的?
  7. Taro+react开发(57) 图片引入
  8. Mybatis(1)---入门篇单表查询
  9. linux建立ftp suse_suse开通ftp的实例
  10. iQOO Pro 5G评测:配置彪悍定价亲民 成功拉低5G手机准入门槛
  11. IEnumerable和使用收益回报的递归
  12. Bailian4150 上机【DP】
  13. SQL Server高级查询之常见数据库对象(索引)第五章节
  14. 在移动端H5开发中(关于安卓端position:fixed和position:absolute;和虚拟键盘冲突的问题,以及解决方案)...
  15. python语音合成并播放_用Python写一个语音播放软件
  16. IntelliJ IDEA Dependency 'XXXX' not found 或 java:程序包XXXX不存在,找不到的解决方案
  17. 自定义ViewPager和RecyclerView指示器 Indicator
  18. python基础知识下载_python基础知识(实用)
  19. ETL(kettle)创建工作任务job详解
  20. 怎么样做能让站点文章收录更快一些呢

热门文章

  1. RabbitMQ consumer的一些坑
  2. 对于DOM的attribute和property的一些思考
  3. Your account has been locked out. Please contact the system administrator for further assistance.
  4. AJAX for Java简单表数据查询实例
  5. 安徽50岁计算机职称免考,50岁以上评职称免考外语
  6. 怎样把计算机放到手机桌面,如何将电脑桌面的文档发送到手机微信
  7. Spring-tx-Propagation枚举类
  8. IntelliJ IDEA-遇见的问题总结
  9. python barh_Python matplotlib.axes.Axes.barh()用法及代码示例
  10. Go的http库详解