GET请求映像后上传AWS S3,但上传不正确

时间:2018-12-03 20:49:45

标签: javascript node.js amazon-web-services amazon-s3 aws-sdk

使用Node(使用request-promise-nativeaws-sdk从另一个URL下载图像后,我试图将图像上传到我的AWS S3存储桶:

'use strict';

const config = require('../../../configs');
const AWS = require('aws-sdk');
const request = require('request-promise-native');

AWS.config.update(config.aws);
let s3 = new AWS.S3();

function uploadFile(req, res) {

    function getContentTypeByFile(fileName) {
        var rc = 'application/octet-stream';
        var fn = fileName.toLowerCase();

        if (fn.indexOf('.png') >= 0) rc = 'image/png';
        else if (fn.indexOf('.jpg') >= 0) rc = 'image/jpg';

        return rc;
    }

    let body = req.body,
        params = {
            "ACL": "bucket-owner-full-control",
            "Bucket": 'testing-bucket',
            "Content-Type": null,
            "Key": null, // Name of the file
            "Body": null // File body
        };

    // Grabs the filename from a URL
    params.Key = body.url.substring(body.url.lastIndexOf('/') + 1);

    // Setting the content type
    params.ContentType = getContentTypeByFile(params.Key);

    request.get(body.url)
    .then(response => {
        params.Body = response;
        s3.putObject(params, (err, data) => {
            if (err) { console.log(`Error uploading to S3 - ${err}`); }
            if (data) { console.log("Success - Uploaded to S3: " + data.toString()); }
        });
    })
    .catch(err => { console.log(`Error encountered: ${err}`); });
} 

我测试上传成功,但是尝试从存储桶重新下载后,该图片无法显示。此外,我注意到使用函数上传文件后,存储区中列出的文件的文件大小比原始上传的图像大得多。我试图弄清楚哪里出了问题,但找不到地方。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:2)

尝试使用文本编辑器打开错误的文件,您将看到其中写入的一些错误。 您可以尝试使用s3.upload代替putObject,它与流效果更好。