POST
base64 文字列としてエンコードされた画像があり、別の REST API ( http://ocrapiservice.com/documentation/ ) へのパラメーターとしてそれを試みています。
ファイルをディスクに保存する必要はありません - ファイルをメモリに保持したいのは、最終的に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の例を使用してみましたが、少なくともファイル名と正しい Content-Type を送信するように変更することができます。
メモリ内ファイルを Web サービスへのパラメーターとしてポストするにはどうすればよいですか?
アップデート:
上記のコードを修正/更新しました。
上記の REST API から得られる応答は次のとおりです。
HTTP/1.1 400 不正な要求
ファイルが提供されていません
これが私が実行している実際のコードです: https://gist.github.com/leggetter/4968764