2012-02-17 31 views
17

如何在node.js/express上發送文件。如何使用node.js發送文件

我正在使用Rackspace Cloudfiles並希望將圖像/視頻發送到其遠程存儲器,但我不確定它如何讀取文件(fs.readFileSync())並在請求正文中發送數據,或者它?

標題應該是什麼。

如果是幾GB中的一個非常大的文件會怎麼樣?

爲此可以使用superagent(http://visionmedia.github.com/superagent)還是有更好的庫發送文件?

請給我一些關於這方面的信息。

謝謝!

回答

5

我使用Rackspace公司Cloudfiles和想發送圖像/視頻到其遠程存儲,但我不知道它是爲讀取文件一樣簡單(fs.readFileSync()),並在請求體中發送數據,還是它?

你應該從未一般使用fs.readFileSync。當您使用它或任何其他稱爲somethingSync的方法時,您在該呼叫期間阻止整個服務器的只有在node.js程序中進行同步調用的可接受時間是在啓動過程中。

標題應該是什麼。

參見RackSpace Cloud Files API

爲此可以使用superagent(http://visionmedia.github.com/superagent)還是有更好的庫發送文件?

雖然我沒有superagent的任何經驗,但我相信它會正常工作。只要確保您閱讀API文檔並根據其規範提出請求。

4

對於大文件,您將需要使用node.js將IO流管道連接在一起的概念。您希望打開本地文件進行讀取,將HTTP請求啓動到rackspace,然後將數據事件從文件讀取進程傳送到HTTP請求進程。

Here's an article on how to do this

Superagent適用於小文件,但由於superagent API會假設您的整個請求體在啓動請求之前已加載到內存中,因此它不是大文件傳輸的最佳方法。

通常情況下,您不需要特別擔心請求標頭,因爲節點的HTTP請求庫會爲您發送適當的標頭。只要確保你使用你的API需要的任何HTTP方法(可能是POST),並且它看起來像rackspace,你需要在你的API令牌中添加X-Auth-Token額外的頭文件。

36
app.get('/img/bg.png', function(req, res) { 
    res.sendFile('public/img/background.png') 
}) 

http://expressjs.com/api.html#res.sendfile

使用 「res.sendFile」。 「res.sendfile」已棄用。

+6

明確棄用res.sendfile:使用res.sendFile代替 – NuclearPeon 2015-01-07 20:22:45

+0

如果路徑需要是相對的,則需要使用 var path = require('path'); router.get('/ GetAudio',function(req,res,next){res.sendFile(__ dirname +「/public/img/background.png」); }); – Mahesh 2016-10-24 15:36:47

+0

這是什麼意思?這只是創建一個別名,但你可以將文件移動到該位置 – kim366 2017-10-22 10:51:57