首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Nginx无法从Node/Express应用程序发送完整文件

Nginx无法从Node/Express应用程序发送完整文件
EN

Stack Overflow用户
提问于 2012-04-04 06:43:48
回答 2查看 1.1K关注 0票数 3

向连接速度小于2 2mbps的客户端发送大文件(1.5 be )会导致浏览器仅接收1.08G的数据,但会认为下载已完成。更快的连接接收完整的1.5 the文件。

我的Express.js应用程序确定要发送哪个文件,并使用response#download方法进行响应:

代码语言:javascript
复制
app.get('/download-the-big-file', function(request, response) {
  var file = {
    name: 'awesome.file',
    path: '/files/123-awesome.file'
  };

  response.header("X-Accel-Redirect: " + file.path);

  response.download(file.path, file.name);
});

请注意,我将X-Accel-Redirect标头设置为利用NginxXsendfile

我的Nginx配置:

代码语言:javascript
复制
server {

    client_max_body_size 2g;
    server_name localhost;

    location / {
        proxy_pass http://127.0.0.1:8000/;
    }

    location /files {
        root /media/storage;
        internal;
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-06 04:29:24

我认为最初的问题源于Node (可能在Node的I/O循环中发送大文件),我认为Nginx正确地从Node下载的假设是错误的。我犯了几个错误,这意味着NginxXSendfile无法工作,而Node仍在处理响应。

我有一个语法错误:

要设置响应头,以下是正确的语法:

代码语言:javascript
复制
response.header('X-Accel-Redirect', file.path);

使用上面的头部(doh!)时,不应该设置响应的正文。

对于快速/连接/节点,只需使用X-Accel- #send报头重定向响应,并使用response#attachment设置Content-Disposition

代码语言:javascript
复制
response.attachment(file.name);
response.send();
票数 3
EN

Stack Overflow用户

发布于 2016-02-13 00:58:36

除了X-Accel-Redirect之外,我还必须向响应头添加一个Content-Disposition

Express.js代码:

代码语言:javascript
复制
app.get('/files/test.txt', function (req, res) {
  res.setHeader('X-Accel-Redirect', '/files/test.txt');
  res.attachment('text.txt');
  res.send();
});

Nginx congif文件(/etc/nginx/sites available/default)

代码语言:javascript
复制
server {

    location /files {
      internal;
      root   /home/user;
    }
}

这服务于/home/user/files中的文件test.txt (即/home/user/files/test.txt)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10002518

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档