如何使用node.js发送文件

ajs*_*sie 27 node.js express

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

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

标题应该是什么.

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

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

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

谢谢!

den*_*que 50

app.get('/img/bg.png', function(req, res) {
  res.sendFile('public/img/background.png')
})
Run Code Online (Sandbox Code Playgroud)

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

使用"res.sendFile"."res.sendfile"已弃用.

  • express deprecated res.sendfile:改为使用res.sendFile (9认同)

Pet*_*ons 6

对于大型文件,您将需要使用node.js的管道IO流的概念.您希望打开本地文件以进行读取,启动对机架空间的HTTP请求,然后将数据事件从文件读取进程传输到HTTP请求进程.

这是一篇关于如何做到这一点的文章.

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

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


Lin*_*iel 5

I am using Rackspace Cloudfiles and wanna send images/videos to their remote storage but I am not sure that it's as simple as reading the file (fs.readFileSync()) and send the data in the request body, or is it?

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

标题应该是什么。

请参阅RackSpace 云文件 API

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

虽然我没有任何使用超级代理的经验,但我相信它会正常工作。只需确保您阅读 API 文档并根据其规范提出请求即可。