Spring Boot提供了多种上传文件的方式,可以通过MultipartFile接收单个文件,也可以通过MultipartHttpServletRequest接收多个文件。但是,Spring Boot并不支持直接上传整个文件夹。
要上传整个文件夹,你需要先将文件夹打包成zip或tar.gz格式的压缩包,然后将压缩包上传到服务器。在服务器端,你可以使用Java的ZipInputStream或TarInputStream类解压缩上传的文件,并将其中的文件保存到指定的目录中。
下面是一个示例代码,展示了如何在Spring Boot中上传一个zip压缩包,并将其中的文件解压缩到指定目录中:
@PostMapping("/upload")
public ResponseEntity<?> handleFileUpload(@RequestParam("file") MultipartFile file) {
try {
// 获取上传的文件名
String fileName = file.getOriginalFilename();
// 创建临时文件
File tempFile = File.createTempFile("temp", null);
// 将上传的文件保存到临时文件中
file.transferTo(tempFile);
// 解压缩临时文件到指定目录中
String targetDir = "/path/to/target/directory";
ZipInputStream zipIn = new ZipInputStream(new FileInputStream(tempFile));
ZipEntry entry = zipIn.getNextEntry();
while (entry != null) {
String filePath = targetDir + File.separator + entry.getName();
if (!entry.isDirectory()) {
// 如果当前entry是文件,则将其保存到指定目录中
extractFile(zipIn, filePath);
} else {
// 如果当前entry是文件夹,则创建该文件夹
File dir = new File(filePath);
dir.mkdirs();
}
zipIn.closeEntry();
entry = zipIn.getNextEntry();
}
zipIn.close();
// 返回上传成功的信息
return ResponseEntity.ok().build();
} catch (IOException e) {
e.printStackTrace();
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
}
}
private void extractFile(ZipInputStream zipIn, String filePath) throws IOException {
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(filePath));
byte[] bytesIn = new byte[4096];
int read = 0;
while ((read = zipIn.read(bytesIn)) != -1) {
bos.write(bytesIn, 0, read);
}
bos.close();
}
需要注意的是,在解压缩文件时,应该谨慎处理文件名,以避免任意文件上传漏洞等安全问题。最好将上传的文件名转换为安全的文件名,例如使用UUID作为文件名前缀。
MultipartFile接收多个文件
@ApiOperation(value = "上传文件", notes = "上传文件")
@RequestMapping(value = "/upload-file", method = RequestMethod.POST)
public ApiResult<Boolean> uploadFile(@RequestParam("files") List<MultipartFile> multipartFiles) {
return dataSourceService.uploadFile(multipartFiles);
}
依次处理即可。
IDEA 保姆级安装教程: http://note.youdao.com/s/Wq2GSETJ 。
计算机专业常用毕业设计集合: http://note.youdao.com/s/PIJHOqnk 。