我有一个图像编码为base64字符串,我试图POST
它作为另一个REST API(http://ocrapiservice.com/documentation/)的参数。如何将base64编码在内存中的图像作为文件参数
我不想将文件存储在磁盘上 - 我想将文件保存在内存中,因为最终我想在客户端上使用getUserMedia
创建映像,我可能会使用托管服务不允许直接文件IO。
我遇到的问题是,我可以使用fs.createReadStream(somePath);
(例如, https://github.com/mikeal/request/blob/master/README.md#forms
我更喜欢使用库,如request库,但也许这是不可能的。
我现在所拥有的代码是:
var fs = require('fs');
var path = require('path');
var request = require('request');
var WS_URL = 'http://api.ocrapiservice.com/1.0/rest/ocr';
function ocr(postData) {
var r = request.post(WS_URL, completed);
var form = r.form();
form.append('apikey', 'REMOVED');
form.append('language', 'en');
form.append('image', postData);
function completed(error, response, body) {
console.log(body);
}
}
// This works
ocr(fs.createReadStream(path.join(__dirname, 'example.png')));
// This does not work
// ignore that it's being read from a file (the next line)
var base64Str = fs.readFileSync('example.png').toString('base64');
var buffer = new Buffer(base64Str, 'base64');
ocr(buffer.toString('binary'));
form.append
确实允许额外的参数,如此发送,如果额外的头需要进行设置,然后这是可能的。
是否有我可以使用的某种Stream
包装?我试过使用这个StringReader的例子,它可以修改它至少发送一个文件名和正确的内容类型。
如何实现将内存文件作为参数传递给Web服务?
更新:
我已经固定/更新上面的代码。
我从上面列出的REST API得到的回应是:
HTTP/1.1 400
没有文件提供错误的请求
下面是我运行的实际代码: https://gist.github.com/leggetter/4968764
我已经更新了发送二进制数据的问题(据我所知),并提供了一个链接到我正在执行的代码中。 – leggetter 2013-02-17 10:21:38
为什么添加'.toString('binary')'?这完全不同。 – loganfsmyth 2013-02-17 16:51:04