首页 > 其他分享 >Spring Boot中的文件上传和下载实现

Spring Boot中的文件上传和下载实现

时间:2023-12-04 17:36:06浏览次数:39  
标签:文件 Spring Boot file 上传 下载

文件上传
文件上传是Web应用程序中常见的功能之一,Spring Boot提供了MultipartFile接口来处理文件上传。以下是实现文件上传的步骤:

添加依赖
在pom.xml文件中添加以下依赖:

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

创建上传页面
在HTML页面中添加上传表单,例如:

<form method="POST" action="/upload" enctype="multipart/form-data">
<input type="file" name="file"/>
<button type="submit">上传</button>
</form>

在表单中使用POST请求将文件上传到/upload路径。

实现上传接口
在Spring Boot应用程序中实现上传接口,例如:

@PostMapping("/upload")
public String upload(@RequestParam("file") MultipartFile file) throws IOException {
String fileName = file.getOriginalFilename();
byte[] bytes = file.getBytes();
Path path = Paths.get("uploads/" + fileName);
Files.write(path, bytes);
return "上传成功!";
}

在上面的代码中,我们使用@RequestParam注解来获取上传的文件,使用MultipartFile接口来处理文件上传,使用Files.write()方法将文件写入到指定路径。

配置上传文件大小限制
默认情况下,Spring Boot限制上传文件的大小为1MB。如果需要上传更大的文件,可以在application.properties文件中添加以下配置:

spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=10MB

在上面的配置中,我们将上传文件的大小限制为10MB。

文件下载
文件下载是Web应用程序中另一个常见的功能,Spring Boot提供了ResourceLoader接口和Resource类来处理文件下载。以下是实现文件下载的步骤:

实现下载接口
在Spring Boot应用程序中实现下载接口,例如:

@GetMapping("/download")
public ResponseEntity<Resource> download(@RequestParam("file") String fileName) throws IOException {
Resource resource = new FileSystemResource("uploads/" + fileName);
HttpHeaders headers = new HttpHeaders();
headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + resource.getFilename() + "\"");
return ResponseEntity.ok().headers(headers).body(resource);
}

在上面的代码中,我们使用@RequestParam注解来获取要下载的文件名,使用ResourceLoader接口和Resource类来加载要下载的文件,使用ResponseEntity类来返回文件内容,使用HttpHeaders类来设置响应头。

配置下载文件大小限制
默认情况下,Spring Boot不限制下载文件的大小。如果需要限制下载文件的大小,可以在application.properties文件中添加以下配置:

spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=10MB

在上面的配置中,我们将下载文件的大小限制为10MB。

以上是在Spring Boot中实现文件上传和下载的步骤。除了上述方法,还可以使用第三方库来实现文件上传和下载功能,例如Apache Commons FileUpload和Apache Commons IO。

使用Apache Commons FileUpload实现文件上传的步骤如下:

添加依赖
在pom.xml文件中添加以下依赖:

<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>

实现上传接口
在Spring Boot应用程序中实现上传接口,例如:

@PostMapping("/upload")
public String upload(HttpServletRequest request) throws Exception {
ServletFileUpload upload = new ServletFileUpload();
FileItemIterator iter = upload.getItemIterator(request);
while (iter.hasNext()) {
FileItemStream item = iter.next();
String fileName = item.getName();
InputStream inputStream = item.openStream();
// 处理上传的文件
}
return "上传成功!";
}

在上面的代码中,我们使用ServletFileUpload类来处理文件上传,使用FileItemIterator类和FileItemStream类来遍历上传的文件,使用InputStream类来读取上传的文件内容。

使用Apache Commons IO实现文件下载的步骤如下:

添加依赖
在pom.xml文件中添加以下依赖:

<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.11.0</version>
</dependency>

实现下载接口
在Spring Boot应用程序中实现下载接口,例如:

@GetMapping("/download")
public ResponseEntity<byte[]> download(@RequestParam("file") String fileName) throws IOException {
File file = new File("uploads/" + fileName);
byte[] bytes = FileUtils.readFileToByteArray(file);
HttpHeaders headers = new HttpHeaders();
headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + file.getName() + "\"");
return ResponseEntity.ok().headers(headers).body(bytes);
}

在上面的代码中,我们使用FileUtils类来读取要下载的文件内容,使用ResponseEntity类来返回文件内容,使用HttpHeaders类来设置响应头。

以上是在Spring Boot中实现文件上传和下载的方法,选择适合自己的方法进行实现即可。

 

参考文章:http://blog.ncmem.com/wordpress/2023/12/04/spring-boot%e4%b8%ad%e7%9a%84%e6%96%87%e4%bb%b6%e4%b8%8a%e4%bc%a0%e5%92%8c%e4%b8%8b%e8%bd%bd%e5%ae%9e%e7%8e%b0/

欢迎入群一起讨论

 

 

标签:文件,Spring,Boot,file,上传,下载
From: https://www.cnblogs.com/songsu/p/17875487.html

相关文章

  • 【Spring】SpringBoot3+ES(Elasticsearch)の環境構築
    参考URL:https://blog.csdn.net/cicada_smile/article/details/132308849https://www.cnblogs.com/hualess/p/11540477.htmlElasticsearchは、オープンソースの分散型検索エンジンであり、大量のデータをリアルタイムで検索、分析することができます。主にJavaで開発されており......
  • 公众号怎么上传PDF文件
    微附件是一个文件图床,是用来给公众号添加附件,但是由于公众号本身不提供这种服务,因此微附件发挥了重要的传媒功能。首先要知道如何打开微附件的官网:利用下方图片中的网址,在浏览器中打开。其次要通过正确的方法上传文件,具体有三个方式都在下方一一列举下来了。1、进入微附件小程序官......
  • Java实现FTP文件上传和下载
    目录一、背景二、maven依赖三、FTP工具类3.1、主动模式(PORT)3.2、被动模式(PASV)四、验证4.1、dos下操作FTP4.2、FTP文件上传4.3、FTP文件下载一、背景  我在之前的文章(Java实现文件上传和下载)里讲过非FTP文件的上传和下载,今天我们来讲一下FTP文件上传和下载,本文测试过程中SpringB......
  • IDEA创建SpringBoot项目无法选择底版本JDK创建
    本地的IDEA版本为2021.3,当我们想要使用SpringInitializr快速创建一个SpringBoot项目时,会发现可以选择的JDK版本基本都是最新版本,而我们本地使用的JDK8,导致无法创建项目。解决方式:1、升级JDK版本因为Spring官网使用的Spring版本比较新,而新版的Spring不支持低版本的JDK了,所以我......
  • SpringBoot文件上传下载
    1、单文件上传这里的enctype的类型是mulitpart/form-data两种形式的提交,一种是以form表单的形式,一个是ajax的形式<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>上传文件</title><scriptsrc="https://cdn.bo......
  • SpringBoot+MybatisPlus 存json读json
    基础环境springboot2.5.3mysql8.0.22fastjson22.0.38主要配置1.返回VO字段添加注解@ApiModelProperty("字段内容")@TableField(typeHandler=JacksonTypeHandler.class)privateList<JSONObject>columnContent;2.返回Mapper中的resultMap中字段添加......
  • Spring中controller中关于GET和POST请求的参数接收
    Spring中controller中关于GET和POST请求的参数接收Spring中controller中关于GET和POST请求的参数接收GET请求参数用&符号连接在一起[/get?name=tom]//无参//没有任何参数的请求@GetMapping(value="/metrics/get")@ApiOperation("get请求没有任何参数")publicRespon......
  • springmvc的controller方法不指定method时可以GET或POST提交
    springmvc的controller方法不指定method时可以GET或POST提交在写controller的方法时@RequestMapping("page")//@RequestMapping(value="page",method=RequestMethod.GET)写法二//@RequestMapping(value="page",method=RequestMeth......
  • SpringMVC中 @RequestParam 与 @PathVariable 区别
    两者都是用来修饰形参两者都是用来绑定访问路径的参数名、形参名称两者接收URL方式不同@RequestParamhttp://www.example.com/pets?petId=3@Controller@RequestMapping("/pets")@SessionAttributes("pet")publicclassEditPetForm{//...@RequestMapping(me......
  • JavaWeb实现文件上传和下载
    环境配置:导入依赖jar包。commons-fileupload-1.4.jarcommons-io-2.6.jar上传表单的enctype属性enctype属性规定在发送到服务器之前应该如何对表单数据进行编码。语法<formenctype="value">1属性值值 描述application/x-www-form-urlencoded 在发送前编码所有字符(默认)multipart/......