3

mikealリクエストライブラリを使用して写真を投稿しようとしていますが、投稿はempになります

request = require('request')
fs = require("fs")
fs.createReadStream('zebra.jpg').pipe(request.post('http://localhost:2000'))

(localhost:2000では、今のところ単純なエコーがあります)

これで動作しますが、標準のPOST形式を使用して追加のパラメーターを渡したいと思います。

私が実際にやろうとしているのは、APIを介してFacebookに画像を投稿することです。つまり、タイトルと、場合によってはさらにいくつかのフィールドを含めたいということです。

ストリーミングが適切なアプローチではない場合(一時ファイルやバッファーなしで逃げるなどの多くの利点がありますが)、適切なアプローチは何でしょうか?

アイデアをありがとう。

UPD:

私はこれまでに持っています:

fs.createReadStream('zebra.jpg').pipe(graph.post('418533674856800/photos', 
    {message:"I'm a new API photo!", name:"API Photo",privacy:{value:"EVERYONE"}},                  
                    function(err, res) {
                          console.log(res);
            }));

しかし、それは戻ります

dest.on('drain', ondrain);
   ^
TypeError: Object #<Graph> has no method 'on'
at [object Object].pipe (stream.js:52:8)
at Request._callback (c:\My Stuff\Creatiff\PRAGmatiki\Web-node.js\postaspage.js:66:36)
at Request.callback (c:\My Stuff\Creatiff\PRAGmatiki\Web-node.js\node_modules\request\main.js:119:22)
at Request.<anonymous> (native)
at Request.emit (events.js:70:17)
at Request.<anonymous> (c:\My Stuff\Creatiff\PRAGmatiki\Web-node.js\node_modules\request\main.js:521:16)
at Request.emit (events.js:67:17)
at IncomingMessage.<anonymous> (c:\My Stuff\Creatiff\PRAGmatiki\Web-node.js\node_modules\request\main.js:483:14)
at IncomingMessage.emit (events.js:88:20)
at HTTPParser.parserOnMessageComplete [as onMessageComplete] (http.js:130:23)

私がストリーミングしているので、これは起こっていますか?助けてください!

4

2 に答える 2

5
var path = require('path'), 
    mime = require('mime');

request({
    url: 'http://localhost:2000',
    headers: {
        'content-type' : 'multipart/form-data'
    },
    method: 'POST',
    multipart: [{ 
        'Content-Disposition' : 'form-data; name="inputname"; filename="' + path.basename('zebra.jpg') + '"',
        'Content-Type' : mime.lookup('zebra.jpg'),
        body: fs.readFileSync('zebra.jpg')
    },{ 
        'Content-Disposition' : 'form-data; name="input[array]"; filename="' + path.basename('zebra1.jpg') + '"',
        'Content-Type' : mime.lookup('zebra1.jpg'),
        body: fs.readFileSync('zebra1.jpg')
    },{ 
        'Content-Disposition' : 'form-data; name="input[array]"; filename="' + path.basename('zebra2.jpg') + '"',
        'Content-Type' : mime.lookup('zebra2.jpg'),
        body: fs.readFileSync('zebra2.jpg')
    },{
        'Content-Disposition' : 'form-data; name="text"',
        body: "text input"                  
    }]
}, 
function(err, res, body){
});
于 2012-08-07T13:17:20.960 に答える
1

何であるかはわかりgraphませんが(mikeaelのドキュメントには記載されていません)、Streamインターフェイスが実装されていないため、と一緒に使用することはできませんpipe()

POSTで複数のパーツを送信するには、タイプのリクエストを使用する必要がありますmultipart/form-data。最新バージョンのmikeal/requestは、これを実験的にサポートしています(例を使用)。他のモジュールもそれをサポートしています(たとえば、前回調べたときにストリームのサポートが少し不足していましたが、ニードル)。

于 2012-07-07T16:00:42.723 に答える