2017-03-23 4 views
2
'use strict'; 
var https = require('http'); 
var aws = require('aws-sdk'); 
var fs = require('fs'); 

aws.config.update({ 
    accessKeyId: 'id', 
    secretAccessKey: 'key', 
    region: 'ap-northeast-1' 
}); 

var s3bucket = new aws.S3(); 
var bucketName = "bukcetName" 

exports.handler = (event, context, callback) => {  

https.get("URL.jpg", function(res, body){ 

    body = new Buffer(res.body, 'binary'); 
    var params = { 
     Bucket:bucketName, 
     Key: "testLambda", 
     Body: body, 
     ACL: 'public-read' 
    }; 
    s3bucket.upload(params, function(err, data) { 
      context.done(null, 'Finished UploadObjectOnS3'); 

    }); 
}); 

}; 

APIGatewayでS3を入れ--->ラムダどのようにダウンロードした画像やラムダnodejs

私はラムダ にURLからダウンロードし、そのコンテンツがS3を入れたいです。

URL からバイナリデータを取得できませんが、Sに任意のデータを置くことができます。ありがとうございました。

答えて

3

私は、あなたのコードをいくつか変更してよりうまく動作させるようにしました。
- 'fs'は必要ありません。
- 正しい方法は「アップロード」ではなく「putObject」です。
ありがとうございました!

'use strict'; 
var AWS = require('aws-sdk'); 
var s3 = new AWS.S3(); 
var http = require('http'); 

aws.config.update({ 
    accessKeyId: 'id', 
    secretAccessKey: 'key', 
    region: 'ap-northeast-1' 
}); 

var s3bucket = new AWS.S3(); 
var bucketName = "bukcetName"; 

exports.handler = (event, context, callback) => {  

    http.get("URL.jpg", function(res){ 
    var imageData = ''; 

    res.setEncoding('binary'); 

    res.on('data', function(chunk){ 
     imageData += chunk; 
    }); 

    res.on('end', function(){ 

     var params = { 
     Bucket: bucketName, 
     Key: "testLambda", 
     Body: new Buffer(imageData, 'binary'), 
     ACL: 'public-read' 
     };  

     s3.putObject(params, function(err, data) { 
     if (err) console.log(err, err.stack); 
     else  console.log(data); 
     context.done(null, 'Finished UploadObjectOnS3'); 
     });  

    }); 

    }); 

}; 
関連する問題