【发布时间】:2018-07-12 04:58:30
【问题描述】:
我有一个使用 Spring Boot REST 服务作为其支持 Web 服务的 Angular Web 应用程序。
我正在为用户添加“个人资料”功能,作为其中的一部分,我想建立一个端点,允许用户为自己上传个人资料图片并立即将这些文件上传到 S3(我将在其中托管所有图片来自)。
看几个Spring Boot/文件上传教程:
- http://www.mkyong.com/spring-boot/spring-boot-file-upload-example/
- I update avatar image and display it but the avatar does not change in Spring Boot , why?
- 许多其他人
似乎处理此类文件上传的标准方法是公开一个接受MultipartFiles 的控制器端点,如下所示:
@RestController
@RequestMapping("/v1/profiles")
public class ProfileController {
@PostMapping("/photo")
public ResponseEntity uploadProfilePhoto(@RequestParam("mpf") MultipartFile mpf)
// ...
}
查看所有这些代码,我无法判断 MultipartFile 实例是否在内存中,或者 Spring 是否将其位置设置在磁盘上的某个位置(可能在 /tmp 下?)。
查看AWS S3 Java SDK tutorial,似乎上传基于磁盘的文件的标准方式是这样的:
File file = new File(uploadFileName);
s3client.putObject(new PutObjectRequest(bucketName, keyName, file));
所以看起来我必须在磁盘上有一个文件才能上传到 S3。
我想知道是否有办法将所有内容保存在内存中,或者这是否是个坏主意,我应该坚持使用磁盘/File 实例!
- 有没有办法将整个配置文件图像 (
MultipartFile) 保留在控制器方法的内存中? - 有没有办法将
MultipartFile实例提供给 S3 的PutObjectRequest? - 或者这是一个糟糕的想法(如果是,为什么?!)?
【问题讨论】:
标签: spring amazon-web-services spring-boot amazon-s3 multipart