我有一個圖像編碼爲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