下面我将详细讲解 Spring MVC 实现文件上传和下载的完整攻略。
文件上传
准备工作
在 Spring MVC 中,文件上传需要使用 MultipartResolver 接口来进行解析。常用的实现类有两种,分别是:
- StandardServletMultipartResolver:使用 Servlet API(3.0)中的 Part 接口进行文件上传解析
- CommonsMultipartResolver:使用 Commons FileUpload 库进行文件上传解析
对于这两种实现类,我们需要在 Spring 的配置文件中进行相应的配置。
以使用 CommonsMultipartResolver 为例,配置如下:
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="10485760"/> <!-- 设置上传文件的最大值为10M -->
<property name="defaultEncoding" value="UTF-8"/> <!-- 设置编码方式为UTF-8 -->
</bean>
实现步骤
- 添加文件上传页面
在 Spring MVC 中,文件上传需要在表单中添加一个 type 为“file”的 input 控件。
<form method="post" action="/upload" enctype="multipart/form-data">
<input type="file" name="file"/>
<input type="submit" value="上传文件"/>
</form>
- 实现文件上传控制器
在控制器中,我们需要注入上一步中配置的 MultipartResolver,然后根据表单中的文件名获取文件流,执行相应的业务逻辑。
@Controller
public class UploadController {
@Autowired
private MultipartResolver multipartResolver;
@PostMapping("/upload")
public String uploadFile(HttpServletRequest request) {
// 判断请求中是否包含文件上传的内容
if (multipartResolver.isMultipart(request)) {
// 转换为 MultipartHttpServletRequest 对象
MultipartHttpServletRequest multipartHttpServletRequest =
(MultipartHttpServletRequest) request;
// 获取文件名为 file 的文件流
MultipartFile file = multipartHttpServletRequest.getFile("file");
// 根据具体业务逻辑进行处理
// ...
// 例如将文件存储到本地文件系统中
if (!file.isEmpty()) {
try {
// 文件存储路径
String filePath = "path/to/your/save/directory";
// 完整的文件名(包含后缀)
String fileName = file.getOriginalFilename();
// 创建本地文件
File localFile = new File(filePath, fileName);
// 写入本地文件系统
file.transferTo(localFile);
} catch (IOException e) {
e.printStackTrace();
}
}
}
return "redirect:/success";
}
}
文件下载
实现步骤
- 实现文件下载控制器
文件下载的控制器和普通的控制器基本一样,只是需要设置响应头,告诉浏览器下载文件而不是打开文件。
@Controller
public class DownloadController {
@GetMapping("/download")
public ResponseEntity<byte[]> downloadFile() throws IOException {
// 获取文件路径
String filePath = "path/to/your/file";
// 获取文件名
String fileName = "your-file-name.txt";
// 读取文件流
File file = new File(filePath, fileName);
byte[] body = null;
InputStream is = new FileInputStream(file);
body = new byte[is.available()];
is.read(body);
// 设置响应头信息
HttpHeaders headers = new HttpHeaders();
headers.add("Content-Disposition", "attachment;filename=" + fileName);
// 设置响应状态码
HttpStatus status = HttpStatus.OK;
// 返回响应实体
ResponseEntity<byte[]> entity = new ResponseEntity<byte[]>(body, headers, status);
return entity;
}
}
- 在页面中添加文件下载链接
在网页中添加一个超链接来触发文件下载操作:
<a href="/download">下载文件</a>
以上就是 Spring MVC 实现文件上传和下载的完整攻略。希望对你有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:springMVC实现文件上传和下载 - Python技术站