2012-07-07 57 views
3

我試圖使用mikeal要求圖書館張貼照片,但後來自EMP過帳(?通過流)與mikeal要求

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) 

這是發生因爲我流?請任何幫助!

回答

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){ 
}); 
1

我不知道什麼是(不出現在mikeael的文檔中),但它不實現Stream接口,因此不能與pipe()一起使用。

要在POST中發送多個零件,您需要使用類型爲multipart/form-data的請求。 mikeal/request的最新版本爲此提供了實驗支持(附帶示例)。其他模塊也支持它(例如針頭,儘管我上次看到流支持有點缺乏)。

+0

圖表是Facebook圖形API 我不明白的例子,我應該調用文件「字段」? 麪條似乎是完全不同的東西,還是我錯了?它說「Node.JS的一個簡單的Oodle REST API包裝器」,而oodle似乎是某種分類的板子。 – 2012-07-07 20:42:04

+0

哎呀我的意思是叫「字段」;) – 2012-07-07 21:54:53

+1

對不起,我的意思是「針」。模塊太多,名字太多。 – OrangeDog 2012-07-08 17:22:40