2012-01-11 50 views
13

我正在使用NodeJS充當服務器來構建API。使用NodeJS在API調用中上傳文件

理想情況下,我希望有一個API端點可以發送一組信息以及一個可以保存到文件系統的文件。

我見過的大多數例子都是通過表單發送文件,但是我想通過發佈請求來完成。

有誰知道我可以做到這一點(如果它是所有可能的)?

在想什麼,我實現的時刻是沿着以下的說法:

app.post('/Some/Endpoint/', controller.handleSomeEndpoint, function(request, response) { 
    response.send('Finished Request'); 
}); 

exports.handleSomeEndpoint = function(request, response, next) { 
    var bodyarr = [] 
    request.on('data', function(chunk){ 
     bodyarr.push(chunk); 
    }) 
    request.on('end', function(){ 
     console.log(bodyarr.join('')); 
    }) 
} 

但數據和最終永遠不會,如果我跑線沿線的一個curl命令叫:

curl http://127.0.0.1:5000/Some/Endpoint/ -F '[email protected]_file' 

乾杯, 馬特

+1

表單是發送文件時的POST請求。事情的節點一方不應該有任何不同。 – Paul 2012-01-11 17:53:19

+1

但如何創建一個沒有窗體的req.files?任何示例? – 2016-02-05 11:03:03

回答

4

答案似乎是expressJS不使用處理後的文件中的NodeJS HTTP模塊的方法相同。

所有這一切都需要的是包括目錄中的文件被寫入到:

app.use(express.bodyParser({uploadDir:'./uploads'})); 

,我發現在這裏:

http://www.hacksparrow.com/handle-file-uploads-in-express-node-js.html

+0

通過這種方式,當我通過POST請求向您發送文件時,您將接受它並保存在./uploads中。我不認爲這是安全的。 – nick 2013-02-05 19:33:29

+0

我認爲這不是不安全的,因爲它是臨時存儲,不是永久性的,意味着它被接受,並不意味着它永久存儲或使用。請求應該被認證(在我的情況下是這樣)。 – 2013-02-06 14:53:06

+0

但是,如果沒有使用表單,如何傳遞req.files?我試圖通過API上傳文件。 – 2016-02-05 11:01:40

0

您的代碼應該做工精細;這是捲曲用法是錯誤的。試試這個:

$ curl -X POST --data-binary @test_file http://localhost:8080 
+0

這實際上弄亂了文件... – Devenv 2016-02-14 16:35:55