2012-08-06 34 views
3

我想讓用戶使用表單將圖像文件上傳(POST)到我的Express.js Web應用程序。收到後,我的Web應用程序將它發佈到GetChute API(一個圖像Web服務)。如何處理Express.js中的POST文件而不執行磁盤寫入

我不希望我的服務器臨時將圖像寫入磁盤 - 它應該將圖像存儲到變量,並將其發送到GetChute。我認爲2個Express中間件項目(Connect和Formidable)我認爲提供了一種從POST自動執行磁盤寫入的好方法,但是如何繞過它們直接訪問字節流,以便我可以避免磁盤寫入?

我懷疑有人比我聰明能想出比最近在一個類似的問題被趕到一個整潔的解決方案:

Stream file uploaded with Express.js through gm to eliminate double write

謝謝!

+0

爲什麼你不能只將這些值讀入節點中的var並將其推回?是否因爲你依靠一個快速插件來捕獲文件上傳? – jcolebrand 2012-08-06 17:50:52

+1

這是因爲Express的默認窗體處理中間件(Connect&Formidable)抽象了流,所以無法直接訪問它,據我所知。讓我知道如果你找到一種方法來做到這一點,而不需要修改Express的膽量。 :) – Adam 2012-08-06 23:17:42

回答

0

您可以直接將請求傳輸到GetChute嗎?

app.post('/upload', function(req, res) { 
    var chuteReq = http.request({ 
    host: 'api.getchute.com', 
    path: '/x/y/z', 
    method: 'POST' 
    }, function(chuteRes) { 
    var chuteBody = ''; 

    chuteRes.on('data', function(chunk) { 
     chuteBody += chunk; 
    }); 

    chuteRes.on('end', function() { 
     var chuteJSON = JSON.parse(chuteBody); 

     // check the result and build an appropriate response. 
     res.end(chuteJSON); 
    }); 
    }); 

    // pipe the image data directly to GetChute 
    req.pipe(chuteReq);  
}); 

當然,您可以將請求調整爲GetChute。要小心,您可能需要解碼multipart/form-data

相關問題