使用NodeJS和请求模块以及aws-sdk将图像从Parse移动到S3 / CloudFront

时间:2013-11-26 22:36:03

标签: node.js amazon-web-services amazon-s3 request

好。 NodeJS使用请求模块。在Parse(在S3中)下载资源,我想使用aws-sdk节点模块上传到我的S3存储桶(在CloudFront端点后面)。这是我的代码:

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

AWS.config.loadFromPath('./aws-config.json');
var s3 = new AWS.S3();

var url = "http://files.parse.com/[the rest of the url]";

request(url, function (error, response, body) {
    console.log(response);
    if (!error && response.statusCode == 200) {
        s3.putObject({
            "Body": body,
            "Key": "thumbnail2.jpg",
            "Bucket": "[my-bucket]"
        }, function (error, data) {
            console.log(error || data);
        });
    }
});

如果我打开解析网址,我会看到图片。如果我打开我的桶中的URL,我会得到一个破碎的图像。

1 个答案:

答案 0 :(得分:4)

您需要做两件事:

  • 将请求的编码设置为二进制
  • 将二进制缓冲区传递给S3

尝试一下:

            var options = {
                uri: "http://files.parse.com/[the rest of the url]",
                encoding: 'binary',
            };

            request(options, function (error, response, body) {
                if (!error && response.statusCode == 200) {
                    s3.putObject({
                        "Body": new Buffer(body, 'binary'),
                        "Key": "thumbnail2.jpg",
                        "Bucket": "[my-bucket]"
                    }, function (error, data) {
                        console.log(error || data);
                    });
                }
            });