Spring Boot 教程 - 文件上传下载
在日常的开发工作中,基本上每个项目都会有各种文件的上传和下载,大多数文件都是excel文件,操作excel的JavaAPI我用的是apache的POI进行操作的,POI我之后会专门讲到。此次我们不讲如何操作文件,只讲如何上传文件和下载文件。
1. 文件的上传
在现在的JavaWeb项目中,与前端进行交互的基本都是SpringMVC框架。Spring专门提供了一个接口MultipartFile,这个接口帮我们简化了从页面到服务端的文件操作,以前我们只能从request里面拿,现在有了这个接口,我们操作起来就会很简单。话不多说,直接上代码。
我们只是模拟文件上传的操作,所以我们从页面上传文件,然后存到电脑桌面。
@RequestMapping("/upload")
public void upload(MultipartFile file) throws IOException {
init(file, 1);
}
@RequestMapping("/uploads")
public void uploads(MultipartFile[] files, DTO dto) throws IOException {
for (int i = 0; i < files.length; i++) {
init(files[i], i);
}
System.out.println(dto.getParam());
}
/**
* 下载文件初始化
* @param file 文件
* @param i 为了区别文件,防止被覆盖
* @throws IOException
*/
private void init(MultipartFile file, int i) throws IOException {
String filename = file.getOriginalFilename();
OutputStream os = new FileOutputStream(new File("C:\\Users\\WJF\\Desktop" + File.separator + i + filename));
InputStream is = file.getInputStream();
StreamUtils.copy(is, os);
is.close();
os.close();
}
上面的代码中,不管是单个文件还是多文件都是很简单的,还可以带其他参数DTO。
2. 文件的下载
文件的下载也是很简单的,但是Response头如果没有设置好,就可能下载失败,下载下来也可能是乱码的。但是这些头设置其实很简单,但是每次下载文件的时候都要这么设置一下,其实是很繁琐的,所以在这里我使用了已经封装好的下载API,直接上代码。
首先我们引入jar包:
<!--springboot父工程-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
<!--springboot框架web组件-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--wjf-download下载小框架,用来简化下载的无味繁琐的操作-->
<dependency>
<groupId>red.wjf</groupId>
<artifactId>wjf-download</artifactId>
<version>0.1.0.RELEASE</version>
</dependency>
</dependencies>
在这里我引入了一个下载的jar包,这个包可以在maven中央仓库直接找到的。这个下载文件jar包的官网地址:传送门
在下载文件之前我们需要配置一下,创建一个下载器,将下载器交给Spring管理:
DownloadConfig.java:
package com.butterflytri.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import red.wjf.download.downloader.ImageDownloader;
import red.wjf.download.downloader.WebDownloader;
/**
* @author: WJF
* @date: 2020/7/29
* @description: DownloadConfig
*/
@Configuration
public class DownloadConfig {
@Bean
public WebDownloader webDownloader() {
return new WebDownloader();
}
@Bean
public ImageDownloader imageDownloader() {
return new ImageDownloader();
}
}
在这里我们创建了两个下载器,都交给了Spring框架管理。
@RequestMapping("/downloadTest")
public void download01(HttpServletRequest request, HttpServletResponse response, String fileName) {
InputStream is = this.getClass().getClassLoader().getResourceAsStream("test.docx");
try {
DataWriter writer = new DataWriter(is);
webDownloader.defaultDownload(request, response, fileName, writer);
} catch (IOException e) {
e.printStackTrace();
}
}
@RequestMapping("/downloadImg")
public void downloadImg(HttpServletRequest request, HttpServletResponse response) {
InputStream is = this.getClass().getClassLoader().getResourceAsStream("img.jpg");
ImageWriter writer = new ImageWriter(is, ImgSuffix.JPG);
imageDownloader.defaultDownload(request, response, writer);
}
这两个文件(test.docx和img.jpg)都在类路径下,从浏览器页面调用方法,就会下载,不会乱码也不会下载失败,除非文件不存在。jar包还提供了图片的Base64格式下载。在国内我们只需要调用这个默认的下载方法就可以了。下载的演示我就不演示了,大家可以拉下我的代码看看,觉得我写的东西对你有用,也可以给我点个赞哦。
3. 项目地址
本项目传送门:
- GitHub ---> spring-upload-download
- Gitee ---> spring-upload-download
此教程会一直更新下去,觉得博主写的可以的话,关注一下,也可以更方便下次来学习。
- 作者:Butterfly-Tri
- 出处:Butterfly-Tri个人博客
- 版权所有,欢迎保留原文链接进行转载
Spring Boot 教程 - 文件上传下载的更多相关文章
- spring boot实现文件上传下载
spring boot 引入”约定大于配置“的概念,实现自动配置,节约了开发人员的开发成本,并且凭借其微服务架构的方式和较少的配置,一出来就占据大片开发人员的芳心.大部分的配置从开发人员可见变成了相对 ...
- Spring Boot入门——文件上传与下载
1.在pom.xml文件中添加依赖 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="ht ...
- spring boot:单文件上传/多文件上传/表单中多个文件域上传(spring boot 2.3.2)
一,表单中有多个文件域时如何实现说明和文件的对应? 1,说明和文件对应 文件上传页面中,如果有多个文件域又有多个相对应的文件说明时, 文件和说明如何对应? 我们在表单中给对应的file变量和text变 ...
- spring mvc注解文件上传下载
需要两个包: 包如何导入就不介绍了,前端代码如下(一定要加enctype="multipart/form-data"让服务器知道是文件上传): <form action=&q ...
- Spring Boot—04文件上传
package com.smartmap.sample.ch1.controller.view; import java.io.File; import java.io.IOException; im ...
- spring mvc 实现文件上传下载
/** * 文件上传 * @param pictureFile */ @RequestMapping("/reportupload") public ResponseInfo up ...
- spring boot Tomcat文件上传找不到零时文件夹
springboot项目上传文件是找不到零时文件夹 1.本身启动jar包时内置Tomcat没有创建零时文件夹 2.在zuul网关级别没有创建零时文件夹 处理方案: -Djava.io.tmpdir=/ ...
- Spring Boot RestTemplate文件上传
@ResponseBody @RequestMapping(value = "/upload.do", method = RequestMethod.POST) public St ...
- Spring boot设置文件上传大小限制
原文:https://blog.csdn.net/lizhangyong1989/article/details/78586421 Spring boot1.0版本的application.prope ...
随机推荐
- 学习jvm(一)--java内存区域
前言 通过学习深入理解java虚拟机的教程,以及自己在网上的查询的资料,做一个对jvm学习过程中的小总结. 本文章内容首先讲解java的内存分布区域,之后讲内存的分配原则以及内存的监控工具.再下来会着 ...
- MySQL数据库的安装方法
- 设计模式:visitor模式
核心:将数据结构和数据的处理分开 注意:注意函数的参数传递和调用关系 例子: class Element; class Visitor { public: virtual void Visit(Ele ...
- HITCON2017-web ssrfme
<?php if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { $http_x_headers = explode(',', $_SERVER['HTT ...
- PHPSTORM Live-Templates变量速查表
camelCase(String) 返回字符串作为参数传递,转换为驼峰式大小写.例如, my-text-file/my text file/my_text_file将转化为 myTextFile. c ...
- IntelliJ IDEA 2020.2正式发布,诸多亮点总有几款能助你提效
向工具人致敬.本文已被 https://www.yourbatman.cn 收录,里面一并有Spring技术栈.MyBatis.JVM.中间件等小而美的专栏供以免费学习.关注公众号[BAT的乌托邦]逐 ...
- 自学java,学多久可以自己找到工作?
先以肯定的语气说明一下自学Java,多久可以找到工作: 按照目前Java的体系来说,Java的几个重点在于Javase.数据库.Spring全家桶系列的框架.而其他的在Java体系之内,会基础的操 ...
- PHP linkinfo() 函数
定义和用法 linkinfo() 函数返回有关一个硬连接的信息. 该函数返回设备 ID,如果失败则返回 FALSE. 语法 linkinfo(path) 参数 描述 path 必需.规定要检查的路径. ...
- 新手程序员求职简历缺少这 3 点!别说8k薪资,4K你可能都拿不到!
制作一份简历可能需要八百到千字,但HR看简历的时间只不过短短十秒,甚至可以说是一目十行. 我想针对想做程序员的刚毕业的学生分享着一点自己在求职招聘方面的感悟,不针对工作了多年的老同志了.快毕业那会儿, ...
- luogu P4321 随机漫游 期望dp 二进制 高斯消元
LINK:随机漫游 非常妙的一道题. 容易想到倒推期望. 设状态 f[i][j]表示到达第i个点 此时已经到达的集合为j能走到全集的期望边数. 只要求出来这个就能O(1)回答询问. \(f[i][j] ...
- spring boot实现文件上传下载