簡體   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