【问题标题】:Uploading a base64 image from IOS to S3 using Node.js使用 Node.js 将 base64 图像从 IOS 上传到 S3
【发布时间】:2013-08-27 10:35:47
【问题描述】:

我有以下代码使用 node.js 将图像从 ios 设备上传到 AWS S3:

  var buf = new Buffer(req.body.image.replace(/^data:image\/\w+;base64,/, ""),'base64')

  var s3bucket = new AWS.S3({params: {Bucket: 'forplay-static', Key: 'test.png'}});
  s3bucket.putObject(buf, function(err, data) {
    if (err) {
      return res.send({ success: false, err: err });
    } else {
      return res.send({ success: true });
    }
  });

我发布的图片是:http://pastebin.com/kcmXJbRd

这会在 err 中返回以下错误:

{ "code": "UnexpectedParameter", "name": "UnexpectedParameter" }

将base64图像上传到S3的正确方法是什么?

【问题讨论】:

    标签: node.js file-upload amazon-s3 base64


    【解决方案1】:

    您无法使用密钥创建存储桶。键标识存储桶中的资源。不确定您使用的是什么 AWS 客户端,所以我不确定它应该是什么样子,但可能是这样的:

    var buf = new Buffer(req.body.image.replace(/^data:image\/\w+;base64,/, ""),'base64')
    
    var s3 = new AWS.S3();
    s3.putObject({Bucket: 'forplay-static', Key: 'test.png', Body: buf}, function(err, data) {
      if (err) {
        return res.send({ success: false, err: err });
      } else {
        return res.send({ success: true });
      }
    });
    

    编辑:现在我知道了 aws-sdk,我已经根据文档 here 更改了上面的代码。我只是跳过了createBucket 步骤。您将存储桶和键参数传递给 putObject 方法,而不是 AWS.S3 构造函数。

    【讨论】:

    • 我不是想创建一个新的存储桶,只是想在我现有的存储桶中添加一个新的图像。
    • 我正在使用官方的 aws sdk for node.js。
    • 你能解释一下为什么我们要替换它吗?并且您已经传递了 base64 数据?
    • 我刚刚复制了 OPs 示例,但基本上,你有 base64 数据,但你需要它在缓冲区中,而不是字符串中,所以你必须去掉前导的 "data:image/ png;base64" 部分标识它是什么类型的数据(替换执行此操作),然后创建实际图像内容的 base64 缓冲区。
    • 好的,但是我得到了 Buffer is undefined 错误。任何相同的解决方案。我是这个很困惑的新手
    猜你喜欢
    • 1970-01-01
    • 2011-11-22
    • 1970-01-01
    • 2015-09-05
    • 2020-12-30
    • 2014-06-26
    • 2017-08-01
    • 2017-07-29
    • 2020-02-19
    相关资源
    最近更新 更多