【问题标题】:Node JS AWS S3 file upload. How to get public URL response节点 JS AWS S3 文件上传。如何获取公共 URL 响应
【发布时间】:2015-08-26 02:59:53
【问题描述】:

我正在使用 Node SDK 将文件上传到 Amazon S3。

文件上传工作正常,但我想获取文件的公共 url 以发送回客户端。

目前我得到的回复是:

Successfully uploaded data { ETag: '"957cd1a335adf5b4000a5101ec1f52bf"' }

这是我的代码。我正在使用 Node Express 服务器和 Multer 来处理上传。

app.use(multer({ // https://github.com/expressjs/multer
      dest: './public/uploads/', 
      limits : { fileSize:100000 },
      rename: function (fieldname, filename) {
        var time = new Date().getTime();
        return filename.replace(/\W+/g, '-').toLowerCase() + time;
      },
      onFileUploadData: function (file, data, req, res) {
        // file : { fieldname, originalname, name, encoding, mimetype, path, extension, size, truncated, buffer }
        var params = {
          Bucket: creds.awsBucket,
          Key: file.name,
          Body: data,
          ACL: 'public-read'
        };

        var s3 = new aws.S3()
        s3.putObject(params, function (perr, pres) {
          if (perr) {
            console.log("Error uploading data: ", perr);
          } else {
            console.log("Successfully uploaded data", pres);
          }
        });
      }
    }));

    app.post('/upload-image', function(req, res){
        if(req.files.file === undefined){
            res.send("error, no file chosen");
        }
    });

【问题讨论】:

  • 你是如何让它工作的,我收到“初始化中间件类型错误时出错:app.use() 需要中间件函数”消息

标签: node.js express amazon-s3 multer


【解决方案1】:

使用 upload 代替 putObject。 它将返回 Location 键中的公共 url

【讨论】:

  • 很奇怪。 putObject(...).promise() 工作正常,但 upload(...).promise() 未定义。他们为什么这样做。
  • @Richard 确实 `putObject(...).promise()` 在位置键中返回公共 url,因为我自己找不到它。以下是 2016 年 7 月的一些信息: Promise 目前仅支持返回 Request 对象的操作。由于 s3.upload 是返回 ManagedUpload 实例而不是 Request 的自定义函数,因此该操作目前不支持 Promise reference
猜你喜欢
  • 1970-01-01
  • 2022-10-20
  • 1970-01-01
  • 2013-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多