2015-10-30 16 views
7

amazon Webサーバーに画像をアップロードしたいのですが、そのためにnodejsでaws-sdkを使用しています。aws-sdkを使用してnodejsを使用してs3に画像をアップロード

イメージをs3バケットにアップロードできますが、URLにアクセスするためにURLをクリックすると、アクセス拒否エラーが発生します。

はここに私の設定です

 var AWS = require('aws-sdk'); 

    //aws credentials 
    AWS.config = new AWS.Config(); 
    AWS.config.accessKeyId = "<access_key>"; 
    AWS.config.secretAccessKey = "<secret_key>"; 
    AWS.config.region = "ap-southeast-1"; 
    AWS.config.apiVersions = { 
     "s3": "2006-03-01" 
    } 

    var s3 = new AWS.S3(); 

    var bodystream = fs.createReadStream(req.files.pic.path); 

    var params = { 
     'Bucket': '<bucket_name>', 
     'Key': 'uploads/images/' + req.files.pic.name, 
     'Body': bodystream, 
     'ContentEncoding': 'base64', 
     'ContentType ': 'image/jpeg' 
    }; 

    //also tried with s3.putObject 
    s3.upload(params, function(err, data){ 
     console.log('after s3 upload====', err, data); 
    }) 

画像が正常にアップロードされているが、そのコンテンツタイプがアプリケーション/オクテットです。また、私はいくつかの権限の問題があると思います。新しい権限を追加するとイメージをダウンロードできますが、それを見ることはできません。

この設定で何が問題なのか、またs3.uploadとs3.putObjectメソッドの違いを知りたいのですか?あなたがMetadataセクションを定義する必要がContent-Typeヘッダを指定するために

答えて

3

:リクエスト署名我々が計算されていません。

var params = { 
    'Bucket': '<bucket_name>', 
    'Key': 'uploads/images/' + req.files.pic.name, 
    'Body': bodystream, 
    'ContentEncoding': 'base64', 
    Metadata: { 
     'Content-Type': 'image/jpeg' 
    } 

}; 
+0

を私は { [SignatureDoesNotMatchは、コンテンツタイプをこのように指定しようとした場合、このエラーを取得あなたが提供した署名と一致してください。あなたの鍵と署名の方法を確認してください。] message: '計算したリクエストの署名が、あなたが提供した署名と一致しません。 。あなたの鍵と署名の方法を確認してください '、 コード: 'SignatureDoesNotMatch'、 時間:金2015年10月30日午前12時55分30秒GMT + 0530(IST)、 からstatusCode:403、 再試行可能な値:false、 はretryDelay:30 } –

+0

@BhushanGoelコードを修正しました。コンテンツタイプのダッシュを忘れました –

+0

これはうまくいきました.3Sコンソールでこれを見ることができます: x-amz-meta-content-type: image/png –

関連する問題