【发布时间】:2020-06-05 06:34:25
【问题描述】:
我有一个 Spring 应用程序(在 AWS Lambda 上运行),它获取一个文件并将其上传到 AWS S3。
Spring 控制器将 MultipartFile 发送到我的方法,然后使用 Amazon API Gateway 将其上传到 AWS S3。
public static void uploadFile(MultipartFile mpFile, String fileName) throws IOException{
String dirPath = System.getProperty("java.io.tmpdir", "/tmp");
File file = new File(dirPath + "/" + fileName);
OutputStream ops = new FileOutputStream(file);
ops.write(mpFile.getBytes());
s3client.putObject("fakebucketname", fileName, file);
}
我尝试上传包含 2 页文本的 PDF 文件。上传后,PDF 文件(在 AWS S3 上)有 2 个空白页。
为什么上传的PDF文件是空白的?
我也尝试过使用其他文件(如 PNG 图像),当我打开它时,我上传的图像已损坏。
唯一有效的是我上传了一个文本文件。
【问题讨论】:
-
为什么在尝试将文件上传到 S3 之前不关闭输出流?
-
请参阅答案中的替代方案,以获得使用 S3 上传的更好方法。直接上传到 S3 是安全的,并且会大大提高上传时间的性能。
标签: java spring amazon-web-services amazon-s3 aws-lambda