为什么我的 s3 createPresignedPost 不遵守内容范围长度条件

Why is my s3 createPresignedPost not respecting the content-range-length condition

我正在尝试 post 使用 createPresignedPost 将文件发送到 s3。该文件正在 post 发送到我的存储桶,但它不遵守文件大小限制。这是我的代码,文件上传是base64编码的字符串。

function postObjectSignedUrl(req) {
const key = `${req + "/" + uuid.v4()}`;
return new Promise(function (resolve, reject) {
    const params = {
        Bucket: 'base',
        Expires: 60 * 60, // in seconds,
        Fields: {
            key: key,
        },
        conditions: [
            ['content-length-range', 0,1000000]
        ]


    }
    s3.createPresignedPost(params, (err, data) => {
        if (err) {
            reject(err)
        } else {
            resolve(data);
        }
    })
})

}

我的客户端代码如下:

var data = new FormData();
const getUrl = await getSignedUrl();
const keys = getUrl["fields"];
$.each(keys, function(key,value){
    data.append(key,value);
});


data.append("file", profilePic);
try {

    const result = await fetch(getUrl["url"], {
        method: "POST",
        mode: "cors",
        headers: {
            'Access-Control-Allow-Origin': '*',
        },
        body: data
    })
    if (result.status === 204){

    }
} catch (err) {
    console.log(err, " error ")
}

通常 NodeJS SDK 中的参数属性是 Upper Camel Case,因此您必须将 "conditions" 更改为 "Conditions"。

顺便说一句,您可以按如下方式更改 url 生成器代码:)

function postObjectSignedUrl(req) {
    const key = `${req + "/" + uuid.v4()}`;

    const params = {
        Bucket: 'base',
        Expires: 60 * 60, // in seconds,
        Fields: {
            key: key,
        },
        Conditions: [
            ['content-length-range', 0,1000000]
        ]
    }

    return s3.createPresignedPost(params).promise();
})

此致,