【问题标题】:how to upload image on amazon s3 using nodejs and make it public如何使用 nodejs 在 amazon s3 上上传图像并将其公开
【发布时间】:2016-06-17 17:05:36
【问题描述】:

我正在使用以下代码将图像上传到亚马逊 S3,但它不公开。我还需要传递什么参数才能将其公开。

var AWS = require('aws-sdk');
AWS.config.region = 'us-west-2';

var s3bucket = new AWS.S3({params: {Bucket: 'myBucket'}});
s3bucket.createBucket(function() {
var params = {Key: 'myKey', Body: 'Hello!'};
s3bucket.upload(params, function(err, data) {
if (err) {
  console.log("Error uploading data: ", err);
} else {
  console.log("Successfully uploaded data to myBucket/myKey");
}
});
});

【问题讨论】:

  • 此代码上传的是文本而不是图像,其次,如果您是 aws-s3 的新手,那么我建议首先手动创建并允许来自 aws 仪表板的存储桶权限,然后尝试上传图像。
  • 这是我的简单解决方案 aws-sdk 与 IAM 用户 - stackoverflow.com/a/40188709/3057302

标签: node.js amazon-s3 aws-sdk


【解决方案1】:

为了在您的存储桶中公开数据,请转换以下内容:

var params = {Key: 'myKey', Body: 'Hello!'};

致关注:

var params = {Key: 'myKey', Body: 'Hello!', ACL: 'public-read'};

为了更好地理解,请关注This Good Tutorial

乐于助人!

【讨论】:

    【解决方案2】:

    对不起,我之前的代码是

    var express = require('express');
    
    var app = express();
    
    var bodyParser = require('body-parser');
    
    app.use(bodyParser.json()); // support json encoded bodies
    
    app.use(bodyParser.urlencoded({ extended: true })); 
    
    var multipart = require('connect-multiparty');
    
    var multipartMiddleware = multipart();
    
    var fs = require('fs'),
        S3FS = require('s3fs'),
        s3fsImpl = new S3FS('****', {
        accessKeyId: '***',
        secretAccessKey: '**********'
    });
    
    // Create our bucket if it doesn't exist
    s3fsImpl.create();
    
    app.post('/api',multipartMiddleware, function (req, res) {
    
    res.send(req.body, req.files);
    
    var file = req.files.file;
    
    var stream = fs.createReadStream(file.path);
    
    return s3fsImpl.writeFile(file.originalFilename, stream).then(function () {
    
        fs.unlink(file.path, function (err) {
            if (err) {
                console.error(err);
            }
        });
        res.status(200).end();
    });
    });
    

    【讨论】:

      【解决方案3】:

      在 s3 存储桶上传数据时公开资源。我可以从任何地方下载该链接。

      试试吧:

      var s3bucket = new AWS.S3({
        region: Constant.AWS_S3_REGION
       });
       console.log(filename);
       var params = {
        Key: filename,
        Body: fs.createReadStream(filepath),
        Bucket: Constant.AWS_S3_BUCKET,
        ACL:'public-read-write'
       };
      s3bucket.upload(params, cb)
      

      干杯...!!!!

      【讨论】:

        猜你喜欢
        • 2021-12-07
        • 2017-06-13
        • 1970-01-01
        • 1970-01-01
        • 2017-04-28
        • 2023-04-08
        • 1970-01-01
        • 2015-03-17
        • 2016-01-09
        相关资源
        最近更新 更多