2015-07-28 3 views
1

Я пытаюсь сделать многостраничную загрузку с использованием cloudfront как конечной точки, я знаю, что это возможно (https://github.com/aws/aws-sdk-js/issues/423), и я также открыл билет на Github из aws-sdk-js, я не знаю, не хватает ли у меня какой-либо опции конфигурации или что-то еще, но я не могу выполнить загрузку Cloufront с помощью функции загрузки многостраничных файлов aws sdk, я всегда получаю 503 запросы PUT.S3 Многостраничная загрузка через облачный дистрибутив с aws-sdk-js

<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>...</AWSAccessKeyId> 
<StringToSign>POST 

application/octet-stream; charset=UTF-8 

x-amz-acl:private 
x-amz-date:Tue, 28 Jul 2015 15:22:01 GMT 
x-amz-user-agent:aws-sdk-js/2.1.40 
/bucket-name/test_797965294</StringToSign> 
<SignatureProvided>...</SignatureProvided> 
<StringToSignBytes>....</StringToSignBytes><RequestId>7488F0A2F70E4AC5</RequestId> 
<HostId>...</HostId> 
</Error> 

Я использую следующий код запуска нескольких частей загрузки:

AWS.config.update({ 
    accessKeyId: 'XXXXXXXXXXXXXXXXX', 
    secretAccessKey: 'XXXXXXXXXXXXXXXXXX' 
}); 

var s3Client = new AWS.S3({ 
    endpoint: 'XXXXXXXX.cloudfront.net', 
    s3BucketEndpoint: true, 
    region: 'eu-west-1' 
}); 

var TEMP_filename = 'test_' + Math.floor(1000000000*Math.random()); 

var params = { 
    Bucket: 'bucket-name', 
    Key: TEMP_filename, 
    ACL: 'private' 
}; 

s3Client.createMultipartUpload(params, function(err, data) { 
    if (err) { 
     console.log(err, err.stack); // an error occurred 
    } else { 
     console.log(data);   // successful response 
    } 
}); 

И результат: Network output from google console

Request detail

Я пропускаю что-то в конфигурация клиента?

Следует также отметить, что при использовании AWS.S3.ManagedUpload почти все работает отлично. Если размер файла меньше, чем требуется для многостраничной загрузки, все идет хорошо, но при переключении на многостраничную загрузку все разрывается снова. Он всегда находится в запросах POST, запросы PUT, похоже, работают нормально.

Единственный способ, по-видимому, работать, использует функцию putObject, используя эту функцию. У меня нет никаких проблем, но мне нужна поддержка возобновления, и это может быть достигнуто только через многостраничную загрузку.

BTW, я использую последнюю версию SDK: AWS-СДК-JS Кто/2.1.40

ответ

1

ответил на билет, я открыл на GitHub (https://github.com/aws/aws-sdk-js/issues/669), проблема в плохой конфигурации на CloudFront.

Чтобы включить многостраничную загрузку, нам необходимо настроить строки прямого запроса в решении Cloudfront Web destribution.

После включения этого и ожидающего развертывания облачного распределения все работает отлично.

Смежные вопросы