Я пытаюсь загрузить файл в корзину AWS S3 с помощью заранее записанного сообщения.
Когда я генерирую PresignedPost
на сервере, используя AWS SDK для Ruby (версия 3), я неполучить правильный URL-адрес и поля для клиента, чтобы сделать успешный запрос POST.
Генерация PresignedPost
в ruby:
client = Aws::S3::Client.new(
region: public_bucket_region,
credentials: public_bucket_credentials
)
aws_bucket = Aws::S3::Bucket.new(
public_bucket_name,
client: client
)
request = aws_bucket.presigned_post(
key: 'some-random-key',
acl: 'public-read',
expires: Time.zone.now + 5.minutes
)
puts request.url
=> "https://bucket-name.s3.eu-west-1.amazonaws.com"
puts request.fields
=>
{
Expires: "Wed, 30 Oct 2019 16:53:01 GMT",
acl: "public-read",
key: 'some-random-key'
}
Согласно документации, все, что мне нужнона этом этапе сделать запрос POST к возвращенному URL, включая данные поля в теле.
Однако этого явно недостаточно, я получаю сообщение об отказе в доступе. Я ожидал, что URL будет содержать идентификатор ключа доступа, подпись, политику и т. Д.
Что мне не хватает?
Редактировать:
POST
запрос строится как таковой (в приложении React Native), я понимаю, что мне нужны некоторые дополнительные вещи в теле / заголовках, но мое предопределенное сообщение, похоже, не возвращает ничего полезного в request.fields
:
const body = new FormData();
Object.entries(request.fields).forEach(([k, v]) => {
body.append(k, v);
});
body.append('file', file);
await fetch(request.url, {
method: 'post',
body: body
});