第一题:上传多个文件后显示文件列表,点击后能下载,并且有如下限制:每个文件不能超过3M字节,每次上传总的上传文件不能超过10M字节,并且只能上传pdf类型的文件。用springboot
时间: 2024-11-12 17:41:19 浏览: 9
3M一字封箱机(STP).rar
在Spring Boot项目中实现这个需求,可以采用以下几个步骤:
1. **文件上传**:
使用Spring MVC的`MultipartFile`来处理文件上传。在控制器方法中,接收前端POST请求,验证文件大小、类型以及总上传大小是否符合限制。例如:
```java
@PostMapping("/upload")
public String uploadFiles(@RequestParam("files") MultipartFile[] files) {
if (files == null || files.length == 0) return "没有选择文件";
long totalSize = files.stream().mapToLong(MultipartFile::getSize).sum();
if (totalSize > 10 * 1024 * 1024) { // 10MB
return "上传文件总大小超过限制";
}
List<String> invalidTypes = files.stream()
.filter(file -> !file.getOriginalFilename().toLowerCase().endsWith(".pdf"))
.map(MultipartFile::getOriginalFilename)
.collect(Collectors.toList());
if (!invalidTypes.isEmpty()) {
return "只允许上传PDF文件:" + String.join(", ", invalidTypes);
}
// 文件存储逻辑(通常是持久化到服务器存储或云存储)
// ...
// 显示文件列表
Map<String, String> fileMap = files.stream()
.collect(Collectors.toMap(MultipartFile::getName, MultipartFile::getOriginalFilename));
return "文件已上传,文件列表:" + fileMap;
}
```
2. **文件下载**:
在Spring MVC中,你可以提供一个链接或者按钮,当用户点击时,直接返回文件流供下载。在控制器中添加类似这样的方法:
```java
@GetMapping("/download/{filename}")
public ResponseEntity<InputStreamResource> downloadFile(@PathVariable String filename) {
// 根据实际文件路径获取并验证文件是否存在
InputStream inputStream = ...; // 获取文件输入流
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM); // 设置Content-Type
return ResponseEntity.ok()
.headers(headers)
.body(new InputStreamResource(inputStream))
.contentType(MediaType.APPLICATION_OCTET_STREAM);
}
```
阅读全文