2017-04-03 118 views
1

我正在使用react-s3-uploader節點包,它將signingUrl用於獲取用於將對象存儲到S3中的signedUrl。S3.getSignedUrl接受多個內容類型

目前我配置了一個lambda函數(帶有一個API網關端點)來生成這個signedUrl。一些修修補補後,我找到了工作,但注意到,我在我的lambda函數的content-type,它看起來像這樣來定義:

var AWS = require('aws-sdk'); 
const S3 = new AWS.S3() 
AWS.config.update({ 
    region: 'us-west-2' 
}) 

exports.handler = function(event, context) { 
    console.log('context, ', context) 
    console.log('event, ', event) 
    var params = { 
    Bucket: 'video-bucket', 
    Key: 'videoname.mp4', 
    Expires: 120, 
    ACL: 'public-read', 
    ContentType:'video/mp4' 
    }; 
    S3.getSignedUrl('putObject', params, function (err, url) { 
    console.log('The URL is', url); 
    context.done(null, {signedUrl: url}) 
    }); 
} 

的問題是,我想這個標識的URL能夠接受多種類型的視頻文件,並且我嘗試將ContentType設置爲video/*,這不起作用。另外,因爲這個lambda端點並不是真正需要上傳的,所以我無法事先將文件類型傳遞給這個函數。

回答

1

您必須找到一種方法來發現文件類型並將其作爲參數傳遞給Lambda函數。在這裏,沒有其他替代方案,並且預先簽署PUT

PUT的請求籤名過程沒有規定通配符或多個/替代值。

+0

謝謝你讓我知道!我只是想確保沒有更好的方法,然後才能實施類似'hackish'解決方案。 –

0

如果其他人正在尋找工作答案,我最終發現react-s3-uploader確實將內容類型和文件名傳遞給了getSignin url(除了我忘記了通過API Gateway之前傳遞的查詢)之外,所以我能夠在lambda中將其解壓爲event.params.querystring.contentType

然後在params中,我只需設置{ContentType: event.params.querystring.contentType},現在它接受所有文件格式。