2017-04-03 26 views
1

react-s3-uploaderノードパッケージを使用しています。これは、S3にオブジェクトを格納するためのsignedUrlを取得するためにsigningUrlを取得します。S3.getSignedUrlを使用して複数のコンテンツタイプを受け入れる

現在、私はこのsignedUrlを生成するためのラムダ関数(APIゲートウェイエンドポイント付き)を設定しました。いくつかの工夫の後、私はそれが動作するようになったが、私はこのようになります私のラムダ関数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を締結したいということです複数の種類のビデオファイルを受け入れるには、ContentTypevideo/*に設定しようとしましたが、これは動作しません。また、このラムダエンドポイントは実際にアップロードを取得するものではないため、この関数にファイルタイプを渡すことはできません。

答えて

1

ファイルタイプを検出してラムダ関数に引数として渡す方法を見つける必要があります。ここには、事前に署名されたPUTの代替案はありません。

PUTの要求署名プロセスには、ワイルドカードまたは複数の代替値の規定がありません。

+0

私にお知らせいただきありがとうございます!私はちょうど良い方法がないことを確かめたいと思っていました。 –

0

答えが見つからない場合は、react-s3-uploaderがコンテンツタイプとファイル名をgetSignin URLに渡すことがわかりました(APIゲートウェイでクエリを渡すのを忘れた場合を除きます)。私はラムダでevent.params.querystring.contentTypeとそれを抽出することができました。

次に、パラメータでは、単に{ContentType: event.params.querystring.contentType}と設定し、すべてのファイル形式を受け入れます。

関連する問題