2016-10-14 3 views
1

Я хочу, чтобы получить заранее подписанный URL для моего S3 ведро для запроса PUT, как это (в node.js)AWS S3 getSignedUrl создает неправильный URL

AWS.config.update({ 
     accessKeyId: s3Config.accessKeyId, 
     secretAccessKey: s3Config.secretAccessKey, 
     region: s3Config.region, 
     signatureVersion: 'v4' 
    }); 
    var s3bucket = new AWS.S3({params: {Bucket: s3Config.bucket,Key:'/content'}}); 
    s3Config.preSignedURL = s3bucket.getSignedUrl('putObject',{ACL:s3Config.acl}) 

в результате я получаю

https://[BUCKET].s3.[REGION].amazonaws.com/[KEY]?[presignedURLStuff]

Этот адрес не соответствует указанным адресам Amazon. URL должен быть в формате http://*.s3.amazonaws.com/*. Я также получаю сообщение об ошибке :: ERR_INSECURE_RESPONSE от предполетного полета. Что мне нужно сделать, чтобы функция создавала правильный URL. Удаление региона из URL приводит к 400 неудачным запросам. Затем выполняются предполетные ВАРИАНТЫ.

+1

В каком регионе находится ковш, и каково ваше представление о правильном URL-адресе? Для некоторых регионов формат, который вы, кажется, показываете, является допустимой альтернативой. –

+0

Работает ли возвращаемый URL? –

+0

s3-eu-west-1 - мой регион. Согласно Amazon, только URL-адрес в формате http: //*.s3.amazonaws.com/* действителен , а возвращаемый URL-адрес дает мне ошибку, даже не долетает –

ответ

0

Я считаю, что запрос PUT должен перейти в конкретную область ковша.

Если по какой-либо причине URL-адрес, который вы получили, имеет неправильный регион для вашего ведра (скажем, ваш экземпляр EC2 находится в другом регионе) вы можете установить область ведра в S3 init.

return new aws.S3({region:"s3-eu-west-1"}) 
Смежные вопросы