使用Node.js将base64映像从IOS上传到S3

Ser*_*gel 1 base64 file-upload amazon-s3 node.js

我有以下代码使用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 });
    }
  });
Run Code Online (Sandbox Code Playgroud)

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

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

{ "code": "UnexpectedParameter", "name": "UnexpectedParameter" }
Run Code Online (Sandbox Code Playgroud)

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

tan*_*ols 7

您无法使用密钥创建存储桶.密钥标识存储桶中的资源.不确定您正在使用的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 });
  }
});
Run Code Online (Sandbox Code Playgroud)

编辑:既然我知道aws-sdk,我已经根据这里的文档更改了上面的代码.我刚跳过这createBucket一步.您将bucket和key参数传递给putObject方法,而不是AWS.S3构造函数.