我正在使用预先签名的亚马逊网络服务S3 urls从一个内存有限的设备上传文件。但是,我偶尔会有需要上传的大文件。问题是将这些文件加载到内存中会导致内存不足异常。
我发现可以直接将文件流式传输到S3 (例如,https://www.example-code.com/java/s3_file_stream_upload.asp ),但我找不到任何有关如何使用预签名url实现此目的的信息。
有没有一种方法可以使用预先签名的urls将大文件(5 5GB以下)上传到S3,而不需要先将文件加载到内存中?
发布于 2020-01-23 01:51:46
这可以使用Multipart来实现。你不需要把文件存储在你的本地服务器上,这样可以避免内存异常。
public boolean uploadFileDirectlyToS3(MultipartFile multipartFile, String keyName) {
ObjectMetadata data = new ObjectMetadata();
try {
data.setContentType(multipartFile.getContentType());
data.setContentLength(multipartFile.getSize());
s3Client.putObject(CORE_BUNDLE.getString("bucket.name"), keyName, multipartFile.getInputStream(), data);
//KeyName is the specific and unique path where you wanna place your file in s3
return true;
} catch (Exception e) {
logger.error("Error occured while uploading file to s3 having name: "+multipartFile.getOriginalFilename(), e);
return false;
}
}https://stackoverflow.com/questions/56387203
复制相似问题