[已解决]base64编码上传问题
发布于 12 年前 作者 qwong 30191 次预览 最后一次回复是 8 年前 来自
新手请教一个base64编码上传的问题,请各位大侠帮忙指点一下,多谢。
背景:
提供上传接口给终端的JS调用,因为JS没办法直接上传,所以是把文件转成base64编码传给我,我再调文件服务器上传
问题:
我现在是拿到base64的字符串以后转成buffer保存到本地临时文件,再读取文件上传
因为我没办法把base64的编码直接转成readStream…
这个方法感觉很挫…请教有什么好办法没?
以下是我的代码:
app.post('/uploadBase64', function(req, res) {
var base64Data = req.body.base64Data;
var fileName = req.body.fileName;
var tempFilePath = path.join(__dirname, fileName);
// 用request上传文件
var r = request.post('http://文件服务器', function(error, response, body) {
// 上传完以后删除临时文件
fs.unlink(tempFilePath);
res.send({
media_id: JSON.parse(body).media_id
});
});
// base64保存为临时文件
fs.writeFileSync(tempFilePath, new Buffer(base64Data, 'base64'));
var form = r.form();
form.append('media', fs.createReadStream(tempFilePath));
});
2 回复
看看这个行不:http://technosophos.com/content/using-string-stream-reader-nodejs https://github.com/technosophos/Pronto.js/blob/master/lib/streams/stringreader.js
终于搞定了…
buffer转stream用上面仁兄给的方法或者下面这个都行
http://stackoverflow.com/questions/13230487/converting-a-buffer-into-a-readablestream-in-nodejs
可是我试了很多次都有问题,传到后台以后变成字符串了
后来跟了一下代码,发现是form-data这个中间件影响的
下面这个是form-data的源码,可以看到他是根据path来判断的,因为我们自己转的stream没有path,所以就按照普通字符串处理了…