繁体   English   中英

如何使用预先签名的 URL 将文件上传到 S3,而不将其加载到内存中

[英]How can I upload a file to S3 using a presigned URL without loading it into memory

我正在使用预先签名的 AWS S3 url 从使用 Java 的内存有限的设备上传文件。 但是,我偶尔有需要上传的大文件。 问题是将这些文件加载​​到内存中会导致内存不足异常。

我发现可以将文件直接流式传输到 S3(例如https://www.example-code.com/java/s3_file_stream_upload.asp ),但我找不到有关如何使用的任何信息一个预先签名的网址。

有没有办法使用预签名的 url 将大文件(5GB 以下)上传到 S3,而无需先将文件加载到内存中?

这可以使用 Multipart 来实现。 您不需要将文件本地存储在您的服务器上,这将避免Mermory Exception。 下面的代码是在 Java

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;
        }
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM