Не удается загрузить файл в пространства DigitalOcean, используя ACL в качестве общедоступного для чтения с использованием подписанного URL-адреса POST?
В основном тот же вопрос, но с использованием
POST
вместо
PUT
. Используя POST, я могу добавить другие условия, такие как ограничение размера файла, ограничение типа содержимого и т. Д.
import { createPresignedPost } from '@aws-sdk/s3-presigned-post';
// client S3Client instance from AWS SDK v3.
const url = await createPresignedPost(client, {
Bucket: 'myhpbucket',
Key: 'accordion.gif',
Conditions: [
['eq', '$acl', 'public-read'],
['starts-with', '$Content-Type', 'image/'],
['content-length-range', 1, 512 * 1024] // 512KB size restriction
],
Expires: 3 * 3600 // 3 hour expiry
});
Этот ответ похож на этот:
{
url: 'https://fra1.digitaloceanspaces.com/myhpbucket',
fields: {
bucket: 'myhpbucket',
'X-Amz-Algorithm': 'AWS4-HMAC-SHA256',
'X-Amz-Credential': 'some-value',
'X-Amz-Date': '20210517T125438Z',
key: 'accordion.gif',
Policy: 'policy-id',
'X-Amz-Signature': 'signature'
}
}
Я использую этот ответ во внешнем интерфейсе, используя
XHR2
.
const data = new FormData();
data.append('bucket', 'myhpbucket');
data.append('key', 'accordion.gif');
data.append('Policy', 'policy-id');
data.append('X-Amz-Date', '20210517T125438Z');
data.append('X-Amz-Signature', 'signature');
data.append('X-Amz-Algorithm', 'AWS4-HMAC-SHA256');
data.append('X-Amz-Credential', 'some-value');
// Required for satisfying condition
data.append('Content-Type', 'image/gif');
// Added file as last key of the form data
data.append('file', fileInput.files[0], '/C:/Users/patilh6/Desktop/accordion.gif');
const xhr = new XMLHttpRequest();
xhr.open('POST', 'https://fra1.digitaloceanspaces.com/precommit');
// ACL request header to satisfy condition
xhr.setRequestHeader('x-amz-acl', 'public-read');
xhr.send(data);
Я пробовал с другими условиями, удалив ACL, и загрузка работала безупречно. Я что-то упустил с условием ACL?