【发布时间】:2020-03-02 06:02:47
【问题描述】:
我正在尝试上传 1 GB 以上的文件,我正在使用 Spring Boot。
我已尝试使用以下代码,但出现内存不足错误。
public void uploadFile(MultipartFile file) throws IOException {
try {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
requestFactory.setBufferRequestBody(false);
restTemplate.setRequestFactory(requestFactory);
String uploadFile= restTemplate.exchange(url, HttpMethod.POST,
new HttpEntity<>(new FileSystemResource(convert(file)), headers), String.class).getBody();
} catch (Exception e) {
throw new RuntimeException("Exception Occured", e);
}
}
private static File convert(MultipartFile file) throws IOException {
File convFile = new File(file.getOriginalFilename());
convFile.createNewFile();
FileOutputStream fos = new FileOutputStream(convFile);
fos.write(file.getBytes());
fos.close();
return convFile;
}
我面临的主要问题是,我无法将 MultipartFile 转换为 java.io.File。
我什至尝试将FileSystemResource 替换为ByteArrayResource,但仍然出现OOM 错误。
我什至也尝试过使用以下代码:
private static File convert(MultipartFile file) throws IOException {
CommonsMultipartFile commonsMultipartFile = (CommonsMultipartFile) multipartFile;
FileItem fileItem = commonsMultipartFile.getFileItem();
DiskFileItem diskFileItem = (DiskFileItem) fileItem;
String absPath = diskFileItem.getStoreLocation().getAbsolutePath();
File file = new File(absPath);
}
但是对于上面的 sn-p,我得到了以下异常:
org.springframework.web.multipart.commons.CommonsMultipartFile 不能 转换为 org.springframework.web.multipart.MultipartFile
谁能告诉我如何将 MultipartFile 转换为 java.io.File?
还有比
FileSystemResource更好的方法吗?因为我每次上传前都必须在服务器中创建新文件。如果文件超过 1GB,则必须在服务器端创建另一个 1GB 的新文件,并且必须再次手动删除该文件,我个人不喜欢这种方法。
【问题讨论】:
标签: java spring rest spring-boot spring-mvc