Как загрузить файлы на s3 через REST API - PullRequest
0 голосов
/ 04 марта 2019

Я пытаюсь использовать REST API для загрузки больших файловых фрагментов в S3.Согласно документации, я могу получить uploadId, требуемый для инициирования многочастной загрузки, но когда я выполняю второй шаг Upload Part, я получаю сообщение об ошибке: SignatureDoesNotMatch, а именно:

<?xml version="1.0" encoding="UTF-8"?>
<Error><Code>SignatureDoesNotMatch</Code><Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message><AWSAccessKeyId>AKIAJSHB7UUBEBAA7R3Q</AWSAccessKeyId><StringToSign>AWS4-HMAC-SHA256
20190304T090043Z
20190304/ap-northeast-1/s3/aws4_request
af7e7ce5502f17450f855d48504417d144fae382e6cb02424b00f7a26447bfb9</StringToSign><SignatureProvided>738dd1ddf3d820890a460670e383e9a77f1a085f0db299ba0fc333ba98fc4613</SignatureProvided><StringToSignBytes>41 57 53 34 2d 4...</StringToSignBytes><CanonicalRequest>PUT
/201903/04/mYvQx4dHgY14A.f4v
partNumber=1&amp;uploadId=jpaQIecVCKdk9owl9_GARzhWzj__er1Xsm8gsuEFYW9YV6KTsPtsnf_b2x.TxV3Q.9oEWJhmd0NcG87YWGMM3u9ejpNhs5_xRIJ3khNCB4Wj1XGEzsNxGpJ.l21JwN0aAzkZBm_ZYwlGgkdjf8aJU.Q--
content-encoding:aws-chunked
content-type:application/octet-stream
host:bucketName.s3.ap-northeast-1.amazonaws.com
x-amz-content-sha256:3a71ba7ecd2ca6c45a1c55e501649fe0528cca013a41ec039a5d72d007196e49
x-amz-date:20190304T090043Z
x-amz-storage-class:REDUCED_REDUNDANCY

content-encoding;content-type;host;x-amz-content-sha256;x-amz-date;x-amz-storage-class
3a71ba7ecd2ca6c45a1c55e501649fe0528cca013a41ec039a5d72d007196e49</CanonicalRequest><CanonicalRequestBytes>50 55 54 0a ...</CanonicalRequestBytes><RequestId>D05D18BA7169E142</RequestId><HostId>MX4bdbYIJNzuZXwqp+GrO0ToPbRdX0dYL/9aSrjA/2RpW0YItHAC52Rf1Tur9rcrlRNNYbVTI5E=</HostId></Error>

В соответствии с документация , StringToSign требует CanonicalRequest только при получении начальной подписи, а StringToSign требует предыдущей подписи при загрузке блока.

Насколько я понимаю, начальная подпись генерирует авторизацию, которая используетсячтобы получить идентификатор загрузки.Во время процесса загрузки блока подпись генерируется следующим образом для создания авторизации.Интересно, правильно ли я это понимаю?

chunk-signature

Запросите следующую информацию, я не знаю, что пошло не так.

request information

Кроме того, при создании подписи вам нужно установить Content-Length и x-amz-decoded-content-length, но я не установил его (потому что я не знаю, как рассчитать длину фрагмента-метаданные), я не уверен, должны ли они быть установлены.

Я также не совсем понимаю структуру чанков, описанную в документации.Как мне отправить данные этой структуры?

string(IntHexBase(chunk-size)) + ";chunk-signature=" + signature + \r\n + chunk-data + \r\n

Я надеюсь, что смогу получить указания, большое спасибо!

Ответы [ 2 ]

0 голосов
/ 28 марта 2019

Установка документа для генерации подписей чанков для меня трудна.Я использую начальную подпись, чтобы обеспечить авторизацию для каждой загрузки чанка, которая работает неожиданно.Что касается подписи, может я не так понимаю.

0 голосов
/ 04 марта 2019

Установить тип содержимого на application / octet-stream положить AWS ключ авторизации в Авторизация заголовок.Я предоставляю ссылку ниже, которая показывает пример Java для загрузки файла в корзину S3

http://www.tothenew.com/blog/file-upload-on-amazon-s3-server-via-rest-api-call/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...