网站首页 > 技术文章 正文
前言
- 在Spring Boot框架中,实现文件上传与下载功能通常依赖于Spring MVC的MultipartFile接口,该接口简化了文件在客户端与服务器之间传输的过程。为了使这些功能更加完善,我们通常需要设计一个控制器(Controller),它将负责处理用户的HTTP请求,包括文件上传和下载的操作。
- 文件上传涉及到接收客户端发送的文件数据,并将其存储在服务器上。在这个过程中,Spring Boot提供了一系列的配置选项,允许我们自定义文件上传的临时目录、最大文件大小等属性,以满足不同的应用需求
Spring Boot中文件上传和下载通用配置
- 在Spring Boot应用程序中的文件上传和下载的功能,首先需要在应用的配置文件中(例如application.properties)进行细致的配置。通过spring.servlet.multipart属性集,以限定上传文件的大小、临时文件的存储位置等配置。
- 创建文件上传表单页面:在前端创建一个包含文件上传表单的页面,通常使用HTML和表单标签来实现。表单中必须有一个input标签的type属性为file,用户通过这个输入框选择要上传的文件。同时表单需要设置 enctype="multipart/form-data"
- 处理文件上传请求: 在后端创建一个Controller来专门处理文件上传请求。此Controller需要能够接收上传的文件,并将文件保存到指定的位置。在Spring Boot中使用@RequestParam注解来接收MultipartFile对象,然后使用其transferTo()方法将文件保存到目标位置。
- 提供了文件下载的服务,我们需要创建一个Controller来处理下载请求。该Controller需要根据文件名或其他唯一标识符检索文件的能力,并能够以流的形式将文件内容传递给客户端。在Spring Boot框架中,您可以利用ResponseEntity来构建文件的响应实体,并通过设置适当的HTTP响应头,如Content-Disposition,来指示浏览器以下载方式处理返回的文件内容,从而提供便捷的文件下载体验。
Springboo的文件上传和下载案例
一、文件上传流程和步骤
1、创建上传目录
我们需要在服务器上创建一个目录,用于存储上传的文件。无论是任何操作系统,我们都需要对文件上传的目录具有足够的权限,这样程序可以向其进行读写操作。
2、配置文件上传属性
在application.properties或者application.yml’对上文文件进行相关的配置,如上传目录的路径、文件大小限制等。下面以application.properties为例进行配置
spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=10MB
3、创建文件上传表单页面
在我们文件上传的前端页面中创建一个表单,表单必须支持用户上传文件,注意设置enctype属性
<form action="/fileUpload" method="post" enctype="multipart/form-data">
<input type="file" name="file">
<button type="submit">上传</button>
</form>
4、创建后台的Controller
创建后台的Controller用来处理文件上传请求,并将文件保存到指定相应的的位置。
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
@RestController
public class MyFileUploadController {
@PostMapping("/fileUpload")
public String handleFileUpload(@RequestParam("file") MultipartFile file) {
if (file.isEmpty()) {
return "Please select a file to upload 3KS";
}
try {
byte[] bytes = file.getBytes();
String uploadDir = "/path/upload/";
File uploadedFile = new File(uploadDir + file.getOriginalFilename());
file.transferTo(uploadedFile);
return "File uploaded successfully!";
} catch (IOException e) {
e.printStackTrace();
return "File upload failed!";
}
}
}
二、文件下载流程和步骤
1、创建文件下载接口
我们在后台 创建一个Controller来处理文件下载请求,我们通常根据文件名找到对应的文件,并将其文件的内容以流的形式返回给客户端接受。
import org.springframework.core.io.Resource;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.mvc.method.annotation.MvcUriComponentsBuilder;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
import java.util.stream.Collectors;
@Controller
public class MyFileDownloadController {
private static final String FILE_DIRECTORY = "/path/upload/";
@GetMapping("/fileDownload/{downloadFileName:.+}")
@ResponseBody
public ResponseEntity<Resource> downloadFile(@PathVariable String downloadFileName) {
Path filePath = Paths.get(FILE_DIRECTORY).resolve(downloadFileName).normalize();
try {
Resource resource = new org.springframework.core.io.UrlResource(filePath.toUri());
if (resource.exists() || resource.isReadable()) {
return ResponseEntity.ok()
.contentType(MediaType.APPLICATION_OCTET_STREAM)
.header(HttpHeaders.CONTENT_DISPOSITION, "attachment; downloadFileName=\"" + resource.getFilename() + "\"")
.body(resource);
} else {
return ResponseEntity.notFound().build();
}
} catch (IOException ex) {
ex.printStackTrace();
return ResponseEntity.status(500).build();
}
}
}
小结
通过以上编写步骤基本就可以简单的实现文件上传和下载,文件上传和下载会有很多实现方式,大家可以多多交流。
- 上一篇: 大文件上传实践分享 大文件上传方案
- 下一篇: node框架(egg)前端文件上传以及预览代码示例
猜你喜欢
- 2025-06-12 比较常见类型漏洞讲解(二):文件上传
- 2025-06-12 文件上传漏洞全面渗透姿势总结(文件上传漏洞的防御主要从以下几个方面考虑)
- 2025-06-12 Selenium上传文件有多少种方式?不信你有我全
- 2025-06-12 Spring Boot超大文件上传的正确方式
- 2025-06-12 文件太大上传不了?看这里,秒传(文件太大传不过去)
- 2025-06-12 fastapi+vue3文件上传(vue formdata上传文件)
- 2025-06-12 前端开发-文件上传,如何使用XMLHttpRequest将文件发送到后台?
- 2025-06-12 前端移动端上传图片pc端如何实时获取
- 2024-10-03 .NET Core WebAPI 基础文件上传 winform调用webapi上传文件
- 2024-10-03 SpringBoot中实现文件上传下载的三种解决方案(推荐)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端路由 (61)
- 前端数组 (73)
- 前端js面试题 (50)
- 前端定时器 (59)
- Oracle RAC (76)
- oracle恢复 (77)
- oracle 删除表 (52)
- oracle 用户名 (80)
- oracle 工具 (55)
- oracle 内存 (55)
- oracle 导出表 (62)
- oracle约束 (54)
- oracle 中文 (51)
- oracle链接 (54)
- oracle的函数 (58)
- oracle面试 (55)
- 前端调试 (52)
本文暂时没有评论,来添加一个吧(●'◡'●)