【发布时间】:2017-12-13 14:05:04
【问题描述】:
我正在开展一个项目,该项目需要我使用 javascript 将大文件直接从浏览器上传到 Amazon S3。
有人知道怎么做吗?是否有支持此功能的 Amazon Javascript SDK?
【问题讨论】:
标签: amazon-web-services amazon-s3
我正在开展一个项目,该项目需要我使用 javascript 将大文件直接从浏览器上传到 Amazon S3。
有人知道怎么做吗?是否有支持此功能的 Amazon Javascript SDK?
【问题讨论】:
标签: amazon-web-services amazon-s3
试试 EvaporateJS。它拥有庞大的社区和广泛的浏览器支持。 https://github.com/TTLabs/EvaporateJS.
【讨论】:
使用aws-sdk-js直接从浏览器上传到s3。在我的情况下,文件大小可以达到 100Gb。我用的是分段上传,非常好用。
我必须在私有存储桶中上传,我使用WebIdentityCredentials 进行身份验证。您还可以选择使用CognitoIdentityCredentials。
【讨论】:
如果您可以在服务器端添加逻辑,您可以将预签名的 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
});
【讨论】: