节点js - 在上传时配置aws s3图像

时间:2014-11-14 21:22:25

标签: node.js amazon-web-services configuration amazon-s3 image-uploading

到目前为止有什么工作:

使用此功能,我正在拍摄上传到我服务器的图像,将它们发送到aws S3存储桶,然后从我的机器中删除它们。这一切都很有效。

问题:

如何配置图像以便亚马逊将其作为公共场所并使用适当的内容类型(image / jpeg或image / png)?现在它默认为private和(application / octet-stream)。

这是我可以在节点中配置的吗?或者我需要在我的aws控制台中这样做吗?

function sendFileToAmazon(file) {
    var s3bucket = new AWS.S3({
      params: {Bucket: 'BUCKET NAME'}
    });

    var params = {Key: file.name, Body: ''};

    fs.readFile(file.path, function(err, data) {
      if (err) throw err;
      params.Body = data;

      s3bucket.putObject(params, function(errBucket, dataBucket) {
        if (errBucket) {
          console.log("Error uploading data: ", errBucket);
        } else {
          console.log(dataBucket);
          deleteFileFromTmp(file);
        }
      });
    });
  }

2 个答案:

答案 0 :(得分:25)

这是回答我问题的最佳来源,虽然我最初没有找到答案: http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#putObject-property

我在这里找到了答案: http://blog.katworksgames.com/2014/01/26/nodejs-deploying-files-to-aws-s3/

您可以简单地添加: ContentType: file.mimetype, ACL: 'public-read'到了参数,转过来:

var params = {Key: file.name, Body: ''};

var params = {Key: file.name, Body: '', ContentType: file.mimetype, ACL: 'public-read'};

<强> 编辑:

除了提供文件的mimetype之外,您只能允许特定的mimetypes,例如:&#39; image / jpg&#39;,&#39; image / jpeg&#39;,&#39; image / png&#39;,&#39; image / gif&#39;等...

答案 1 :(得分:0)

我添加了以下ContentType来解决此问题。对于png或jpg,即使没有ContentType也可以使用。但是,如果要上传svg,则必须将ContentType属性发送到S3存储桶。

router.post(uploadImagePath, function (request, response) {
    var form = new formidable.IncomingForm();
    form.parse(request, (err, fields, files) => {
        try {
            let ImageName = files.file.name;
            fs.readFile(files.file.path, function (err, data) {
                let params = {
                    Bucket: 'Bucket-name',
                    Key: Date.now() + "_" + ImageName,
                    Body: data,
                    ACL: 'public-read',
                    ContentType: files.file.type
                };
                s3.upload(params, function (err, data) {
                    response.send(200, { key: data.key })
                });
            });
        }
        catch (e) {
            response.send(500);
        }
    })
});