Java 如何在不存储在服务器硬盘上的情况下上载多部分文件
我的SpringBoot API接收多部分文件。然后使用RestTemplate,我将其发送到不同的API。它很好用 这里的问题是它将多部分文件存储在服务器硬盘上。我的API应该充当前端和另一个API端点之间的中间服务 我不想在本地存储收到的文件 我可以做的一件事是上传到不同的API后删除 我们是否有更好的方法来做同样的事情,即不在服务器上存储或从服务器自动删除 我的代码如下 控制器Java 如何在不存储在服务器硬盘上的情况下上载多部分文件,java,spring-boot,java-8,multipartform-data,resttemplate,Java,Spring Boot,Java 8,Multipartform Data,Resttemplate,我的SpringBoot API接收多部分文件。然后使用RestTemplate,我将其发送到不同的API。它很好用 这里的问题是它将多部分文件存储在服务器硬盘上。我的API应该充当前端和另一个API端点之间的中间服务 我不想在本地存储收到的文件 我可以做的一件事是上传到不同的API后删除 我们是否有更好的方法来做同样的事情,即不在服务器上存储或从服务器自动删除 我的代码如下 控制器 @PostMapping(value = "/uploadFile", consum
@PostMapping(value = "/uploadFile", consumes = { "multipart/form-data" })
public SomePojoObject uploadFile(@RequestParam("file") MultipartFile mFile,
@RequestParam("metaData") String metaData) {
return service.uploadFile(mFile, metaData);
}
服务代码如下所示
private SomePojoObject uploadFile(MultipartFile mFile, String metaData) {
File file = convertFile(mFile);
LinkedMultiValueMap<String, Object> map = new LinkedMultiValueMap<>();
map.add("FILE", new FileSystemResource(file));
map.add("metaData", metaData);
// Some more logic of resttemplate to upload document to server
}
public File convertFile(MultipartFile mFile) {
File file = new File(mFile.getOriginalFilename());
try {
file.createNewFile();
FileOutputStream fileOutputStream = new FileOutputStream(file);
fileOutputStream.write(mFile.getBytes());
fileOutputStream.close();
} catch (IOException e) {
e.printstackTrace();
}
return file;
}
private SomePojoObject上传文件(多部分文件mFile,字符串元数据){
文件文件=转换文件(mFile);
LinkedMultiValueMap=新建LinkedMultiValueMap();
添加(“文件”,新文件系统资源(文件));
添加(“元数据”,元数据);
//resttemplate将文档上载到服务器的更多逻辑
}
公共文件转换文件(多部分文件mFile){
File File=新文件(mFile.getOriginalFilename());
试一试{
createNewFile();
FileOutputStream FileOutputStream=新的FileOutputStream(文件);
fileOutputStream.write(mFile.getBytes());
fileOutputStream.close();
}捕获(IOE异常){
e、 printstackTrace();
}
返回文件;
}
终于找到了一个非常简单的方法来实现上述目标
没有必要将其转换为文件
private SomePojoObject uploadFile(MultipartFile mFile, String metaData) {
LinkedMultiValueMap<String, Object> map = new LinkedMultiValueMap<>();
map.add("FILE", mFile.getResource());
map.add("metaData", metaData);
// Some more logic of resttemplate to upload document to server
}
private SomePojoObject上传文件(多部分文件mFile,字符串元数据){
LinkedMultiValueMap=新建LinkedMultiValueMap();
add(“文件”,mFile.getResource());
添加(“元数据”,元数据);
//resttemplate将文档上载到服务器的更多逻辑
}
终于找到了一个非常简单的方法来实现上述目标
没有必要将其转换为文件
private SomePojoObject uploadFile(MultipartFile mFile, String metaData) {
LinkedMultiValueMap<String, Object> map = new LinkedMultiValueMap<>();
map.add("FILE", mFile.getResource());
map.add("metaData", metaData);
// Some more logic of resttemplate to upload document to server
}
private SomePojoObject上传文件(多部分文件mFile,字符串元数据){
LinkedMultiValueMap=新建LinkedMultiValueMap();
add(“文件”,mFile.getResource());
添加(“元数据”,元数据);
//resttemplate将文档上载到服务器的更多逻辑
}
是否使用MultipartFile#transferTo
将其存储为文件?您可以使用MultipartFile#getInputStream
从内存中读取内容。谢谢Wim。它的默认行为我没有使用其他任何东西变量文件
在您显示的代码中根本没有使用。此外,将MultipartFile转换为File的“逻辑”也很有趣。您可以将文件存储为字节数组或更合适的格式,具体取决于具体的用例。更新了我的问题您是否使用MultipartFile\transferTo
将其存储为文件?您可以使用MultipartFile#getInputStream
从内存中读取内容。谢谢Wim。它的默认行为我没有使用其他任何东西变量文件
在您显示的代码中根本没有使用。此外,将MultipartFile转换为File的“逻辑”也很有趣。根据具体的使用情况,您可以将文件存储在字节数组或更合适的格式中