【发布时间】:2023-03-14 00:09:01
【问题描述】:
我有一些 lambda 函数允许将分段上传到 Amazon S3 存储桶。它们负责创建分段上传,然后为每个分段上传创建另一个,最后一个用于完成上传。
前两个似乎工作正常(它们以 statusCode 200 响应),但最后一个失败了。在 Cloudwatch 上,我可以看到一条错误消息“您建议的上传文件小于允许的最小大小”。
这不是真的,因为我上传的文件大于文档中指定的最小 5Mb 大小。但是,我认为这个问题在每个单独的部分上传中都会发生。
为什么?因为每个部分只有 2Mb 的数据。在文档上,我可以看到除了最后一部分之外的每一部分都需要至少 5Mb 大小。但是,当我尝试上传大于 2Mb 的部分时,我收到了 CORS 错误,很可能是因为我已经超过了 6Mb 的 lambda 有效负载限制。
谁能帮我解决这个问题?下面我留下我的客户端代码,以防您在上面看到任何错误。
setLoading(true);
const file = files[0];
const size = 2000000;
const extension = file.name.substring(file.name.lastIndexOf('.'));
try {
const multiStartResponse = await startMultiPartUpload({ fileType: extension });
console.log(multiStartResponse);
let part = 1;
let parts = [];
/* eslint-disable no-await-in-loop */
for (let start = 0; start < file.size; start += size) {
const chunk = file.slice(start, start + size + 1);
const textChunk = await chunk.text();
const partResponse = await uploadPart({
file: textChunk,
fileKey: multiStartResponse.data.Key,
partNumber: part,
uploadId: multiStartResponse.data.UploadId,
});
console.log(partResponse);
parts.push({ ETag: partResponse.data.ETag, PartNumber: part });
part++;
}
/* eslint-enable no-await-in-loop */
const completeResponse = await completeMultiPartUpload({
fileKey: multiStartResponse.data.Key,
uploadId: multiStartResponse.data.UploadId,
parts,
});
console.log(completeResponse);
} catch (e) {
console.log(e);
} finally {
setLoading(false);
}
【问题讨论】:
标签: amazon-web-services amazon-s3