在将文件上传到云存储位置后,我试图通过在标题中附加文件来删除文件。(上传过程成功)。但是上传成功后我无法删除文件。有什么办法可以通过休息后调用上传一个大文件(最大 150 MB),然后我需要删除该文件。
这是一个生产应用程序,所以我需要选择一个最佳解决方案。我正在使用上述方法,并且还考虑使用另一种方法进行测试 - 将文件转换为 MultipartFile,然后将其上传到云端。然后删除文件和 MultipartFile。
public void fileHandlingService(DocumentFileDetails documentFileDetails,UploadFileRequest uploadFileRequest){
File file = new File(documentFileDetails.getFolderDirectory() + documentFileDetails.getFileName()
+ documentFileDetails.getFileExtension());
uploadingFile(file,uploadFileRequest);
//delete the file whether the upload is success or failure
if (file.exists()) {
//TODO unable to delete file here upload is successful but file resource is getting locked i guess
FileUtils.forceDelete(file);
}
}
public boolean uploadingFile(File file, UploadFileRequest uploadFileRequest) throws IOException {
Resource fileResource=new FileSystemResource(file);
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
MultiValueMap<String, Object> body = new LinkedMultiValueMap<>();
PresignedFields fields = uploadFileRequest.getPresignedPost().getFields();
//attaching some file details to the body
//body.....
body.add("Content-Disposition", "attachment; filename=\"" + uploadFileRequest.getFileName() + "\"");
body.add("Content-Type", uploadFileRequest.getDocumentType());
//file is getting upload to the cloud (need to upload file having size 150 mb)
body.add("file", fileResource);
HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(body, headers);
String serverUrl = uploadFileRequest.getPostUrl();
try {
ResponseEntity<Object> response = restTemplate.postForEntity(serverUrl, requestEntity, Object.class);
if (response.getStatusCode() == HttpStatus.NO_CONTENT) {
log.info("Successfully uploaded document", null);
return true;
}
return false;
} catch (Exception exception) {
log.error("Exception when uploading file" + exception.getMessage(), null);
throw new Exception(ErrorCode.FAILED_UPLOAD.getCode());
}
}
}
使用上面的代码它在这一行失败并出现 IO 异常(猜测 fileSystemResource 没有释放文件的锁定)
FileUtils.forceDelete(file);
例外:
java.io.IOException: Cannot delete file: D:\TempFolder\TestFolder\Testfile.txt
at org.apache.commons.io.FileUtils.forceDelete(FileUtils.java:1344) ~[commons-io-2.11.0.jar:2.11.0]