如何使用node.js发送文件

时间:2012-02-17 00:01:47

标签: node.js express

如何在node.js / express上发送文件。

我正在使用Rackspace Cloudfiles并希望将图像/视频发送到他们的远程存储,但我不确定它是否像读取文件(fs.readFileSync())一样简单并在请求正文中发送数据,或者是?

标题应该是什么。

如果它是几个GB上的一个非常大的文件怎么办?

是否可以使用superagent(http://visionmedia.github.com/superagent)或者是否有更好的文件库来发送文件?

请告诉我一些有关此事的信息。

谢谢!

3 个答案:

答案 0 :(得分:50)

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

https://expressjs.com/en/api.html#res.sendFile

使用“res.sendFile”。 “res.sendfile”已弃用。

答案 1 :(得分:6)

对于大型文件,您将需要使用node.js将IO流连接在一起的概念。您想要打开本地文件进行读取,启动机架空间的HTTP请求,然后将数据事件从文件读取过程传输到HTTP请求过程。

Here's an article on how to do this

Superagent适用于小文件,但由于superagent API假定您的整个请求主体在启动请求之前已加载到内存中,因此它不是大文件传输的最佳方法。

通常,您不需要特别担心请求标头,因为节点的HTTP请求库将为您发送适当的标头。只需确保您使用API​​所需的任何HTTP方法(可能是POST),看起来对于rackspace,您还需要在API令牌中添加X-Auth-Token额外标头。

答案 2 :(得分:4)

  

我正在使用Rackspace Cloudfiles并希望将图像/视频发送到他们的远程存储,但我不确定它是否像读取文件(fs.readFileSync())一样简单并在请求正文中发送数据,或者是?

您通常永远不会使用fs.readFileSync。当您使用它或任何其他名为somethingSync的方法时,您会在该通话期间阻止整个服务器在node.js程序中进行同步调用的可接受时间是在启动期间。

  

标题应该是什么。

请参阅RackSpace Cloud Files API

  

是否可以使用superagent(http://visionmedia.github.com/superagent)或者是否有更好的文件库来发送文件?

虽然我对superagent没有任何经验,但我相信它会正常工作。只需确保您阅读API文档并根据其规范提出请求。