Почему мой s3 createPresignedPost не соблюдает условие content-range-length - PullRequest
0 голосов
/ 15 апреля 2020

Я пытаюсь опубликовать файл на s3, используя createPresignedPost. Файл отправляется в мое ведро, но не соответствует ограничению размера файла. Вот мой код, и файл загружается в формате 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 ")
}

1 Ответ

1 голос
/ 15 апреля 2020

Обычно атрибуты params в NodeJS SDK - это регистр верхнего верблюда, поэтому вы должны изменить «условия» на «Условия».

Кстати, вы можете изменить свой код генератора 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();
})

С уважением,

...