使用浏览器中的Javascript将多部分上传到Amazon S3

时间:2017-07-09 23:03:24

标签: amazon-web-services amazon-s3

我正在开发一个项目,要求我使用javascript直接从浏览器将大文件上传到Amazon S3。

有谁知道怎么做?是否有支持此功能的Amazon Javascript SDK?

3 个答案:

答案 0 :(得分:3)

尝试使用EvaporateJS。它拥有庞大的社区和广泛的浏览器支持。 https://github.com/TTLabs/EvaporateJS

答案 1 :(得分:1)

如果您可以在服务器端添加逻辑,您可以向浏览器返回一个预签名的 S3 上传 URL,并将文件直接上传到 S3。

This answer 有类似的代码,但使用的是 AWS SDK v2。

Javascript 中的示例 (source):

const { S3, PutObjectCommand } = require("@aws-sdk/client-s3");
const { getSignedUrl } = require("@aws-sdk/s3-request-presigner");
...
    const credentials = {
      accessKeyId: "KEY", // UPDATE THIS
      secretAccessKey: "SECRET", // UPDATE THIS
    };
    const options = {
      credentials,
      region: "REGION", // UPDATE THIS
      apiVersion: "2006-03-01", // if you want to fix the api version, optional
    };
    const s3Client = new S3(options);
    // Create the command
    const command = new PutObjectCommand({
      Bucket: 'BUCKET', // UPDATE THIS
      Key: 'OBJ_ID_ON_S3', // UPDATE THIS
    });
    // Create the presigned URL
    const signedUrl = await getSignedUrl(s3Client, command, {
      expiresIn: 60 * 2, // This makes the URL expires after 2 min
    });

答案 2 :(得分:0)

使用aws-sdk-js从浏览器直接上传到s3。就我而言,文件大小可能会达到100Gb。我使用分段上传,非常易于使用。

我必须在专用存储桶中上传,为了进行身份验证,我使用了WebIdentityCredentials。您还可以选择使用CognitoIdentityCredentials