2012-02-17 26 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