【问题标题】:EntityTooLarge when uploading multipart object with parts smaller than 5GB to AWS S3将具有小于 5GB 的部分的多部分对象上传到 AWS S3 时出现 EntityTooLarge
【发布时间】:2020-07-31 00:09:25
【问题描述】:

虽然我非常清楚应该使用分段上传 API 上传大于 5GB 的文件,但在尝试上传单个部分时我仍然收到EntityTooLarge - Your proposed upload exceeds the maximum allowed size 错误消息 em> 小于 5GB。我什至尝试了小至 10MB 的部分,但无济于事。

我就是这样称呼它的(我使用的是Node.js AWS SDK):

s3.uploadPart({
    Bucket: bucket,
    Key: key,
    Body: fs.createReadStream(fullFilePath, { start: start, end: end }),
    ContentMD5: md5,
    UploadId: uploadId,
    PartNumber: partNumber,
}, (error, data) => error ? console.error(error) : console.info(data));

我将fs.createReadStream()startend 选项一起使用,这样我就可以对文件进行切片并以更小的块发送。我测试了那个流,它真的在对文件进行切片,所以我不知道我做错了什么。

【问题讨论】:

    标签: node.js amazon-web-services amazon-s3


    【解决方案1】:

    经过一番反复试验,我发现我还必须指定一个ContentLength 选项:

    s3.uploadPart({
        Bucket: bucket,
        Key: key,
        Body: fs.createReadStream(fullFilePath, { start: start, end: end }),
        ContentLength: bodySize,
        ContentMD5: md5,
        UploadId: uploadId,
        PartNumber: partNumber,
    }, (error, data) => error ? console.error(error) : console.info(data));
    

    其中bodySize 就是end - start + 1,即正在上传的切片的大小。

    传递它有点意义,因为 API 无法知道我提供的流块的大小。

    【讨论】:

    • 我看到了你原来的问题,我想知道如何(或者如果!)“使用 fs.createReadStream() 切片文件......使用开始和结束选项”可能工作。答案是“它确实有效”......需要注意的是,您需要明确指定ContentLength:。请务必“接受”您的回答!
    猜你喜欢
    • 2018-01-07
    • 2017-10-14
    • 1970-01-01
    • 1970-01-01
    • 2014-12-06
    • 2021-10-04
    • 2012-11-16
    • 1970-01-01
    • 2022-06-11
    相关资源
    最近更新 更多