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

3

好的。使用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,我可以看到图片。但是如果我打开存储在我的Bucket中的URL,我会看到一张损坏的图片。

1个回答

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);
                    });
                }
            });

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接