2014-12-18 2 views
0

Я хочу создать подписанный URL с настраиваемым типа контента, я пытался это:Как установить тип содержимого при создании подписанного URL-адреса для объекта в s3 aws?

s3.getSignedUrl('getObject', {Bucket: AWS_BUCKET_NAME, Key: 'myObjectsKey', ContentType: 'image/png'}, function (err, url) { 
    console.log(err, url); 
}); 

однако это дает ошибку:

{ [UnexpectedParameter: Unexpected key 'ContentType' found in params] 
    message: 'Unexpected key \'ContentType\' found in params', 
    code: 'UnexpectedParameter', 
    time: Thu Dec 18 2014 01:38:19 GMT-0400 (AST) } 

Что я нахожу странным, что документация по подписанию запросы здесь:

http://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html

утверждает, что подпись сделана из хеширования:

Подпись = URL-код (Base64 (HMAC-SHA1 (YourSecretAccessKeyID, UTF-8-Encoding-Of (StringToSign))));

StringToSign = HTTP-VERB + "\n" + 
    Content-MD5 + "\n" + 
    Content-Type + "\n" + 
    Expires + "\n" + 
    CanonicalizedAmzHeaders + 
    CanonicalizedResource; 

Это позволяет вам предоставить контент-тип. Кто-нибудь знает, что происходит?

+1

Вы пытались дать '-' (дефис) в Contenttype? – Anubhab

+0

yep, такая же ошибка – Macmee

ответ

0

Тип контента не является частью подписанного URL. Он должен быть установлен на объекте в S3. Это можно сделать при загрузке (http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#putObject-property) или вы можете скопировать объект себе с новым типом контента (http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#copyObject-property).

2

Это, должно быть, было обновлено, потому что теперь вы можете это сделать, просто используйте ResponseContentType, а не ContentType. Проверьте GET Object Docs.

const params = { 
    Bucket: bucket, 
    Key: key, 
    Expires: 60, 
    ResponseContentType: 'image/png' 
}; 

s3.getSignedUrl('getObject', params, function (err, url) { 
    if (url) callback(null, url); 
    else  callback(err, null); 
}); 

Я тестировал его даже с помощью Saz files, и он отлично работал.

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