Spring Boot文件上传问题-无法存储文件错误仅在几天后发生



我使用Java Spring Boot 2.4.2创建了一个RESTful API。

我最近遇到的一个主要问题是,Multipart文件上传工作正常,但几天后相同的代码将不起作用。它将在重新启动RESTFulJAR应用程序后恢复工作。

Postman中显示的错误:无法存储文件。错误

相关代码在这里:

try {
FileUploadUtil.saveFile(uploadPath, file.getOriginalFilename(), file);
} catch (IOException e) {
throw new RuntimeException("Could not store the file. Error: " + e.getMessage());
}

以及FileUploadUtil类:

public class FileUploadUtil {
public static void saveFile(String uploadDir, String fileName, MultipartFile multipartFile) throws IOException {
Path uploadPath = Paths.get(uploadDir);
if (!Files.exists(uploadPath)) {
Files.createDirectories(uploadPath);
}
try (InputStream inputStream = multipartFile.getInputStream()) {
Path filePath = uploadPath.resolve(fileName);
Files.copy(inputStream, filePath, StandardCopyOption.REPLACE_EXISTING);
} catch (IOException ioe) {
throw new IOException("Could not save uploaded file: " + fileName, ioe);
}
}
public static File fileFor(String uploadDir, String id) {
return new File(uploadDir, id);
}}

调用上面代码第一部分的主要POST API方法头是:

@PostMapping(value = "/clients/details/{clientDetailsId}/files/{department}", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
@PreAuthorize("hasAuthority('PERSONNEL') or hasAuthority('CUSTODIAN') or hasAuthority('ADMIN')")
public ResponseEntity<ClientDetails> createClientDetailsFiles(@PathVariable("clientDetailsId") long clientDetailsId,
@PathVariable("department") String department,
@RequestPart(value = "FORM_SEC_58", required = false) MultipartFile[] FORM_SEC_58_file,@RequestPart(value = "FORM_SEC_78", required = false) MultipartFile[] FORM_SEC_78_file,
@RequestPart(value = "FORM_SEC_105", required = false) MultipartFile[] FORM_SEC_105_file,
@RequestPart(value = "FORM_SEC_51", required = false) MultipartFile[] FORM_SEC_51_file,
@RequestPart(value = "FORM_SEC_76", required = false) MultipartFile[] FORM_SEC_76_file)

应用程序属性端:

spring.servlet.multipart.enabled=true
spring.servlet.multipart.max-file-size=90MB
spring.servlet.multipart.max-request-size=90MB

有人能告诉你问题出在哪里吗?

我也遇到了同样的问题,它曾在文件中工作过一次,但过了一段时间,它就停止了工作。我几乎可以肯定你的问题是这样的,因为,我们有相同的代码,我们的场景是相同的。我想的是:

调试

我添加了一个语句来打印错误,以查看实际发生了什么,您当前所做的只是接收错误信息,而不是整个错误。所以将其更改为:

try {
FileUploadUtil.saveFile(uploadPath, file.getOriginalFilename(), file);
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException("Could not store the file. Error: " + e.getMessage());
}

实际问题

错误为FileAlreadyExistsExceptionFileAlreadyExistsException

基本上,这意味着您尝试上传两次相同名称的文件。

解决方案

要解决此问题,可以使用不同的方法。其中之一是为文件生成UUID,并将其存储在数据库中,以便以后访问。

相关内容

最新更新