向连接速度小于2 2mbps的客户端发送大文件(1.5 be )会导致浏览器仅接收1.08G的数据,但会认为下载已完成。更快的连接接收完整的1.5 the文件。
我的Express.js应用程序确定要发送哪个文件,并使用response#download方法进行响应:
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配置:
server {
client_max_body_size 2g;
server_name localhost;
location / {
proxy_pass http://127.0.0.1:8000/;
}
location /files {
root /media/storage;
internal;
}
}发布于 2012-04-06 04:29:24
我认为最初的问题源于Node (可能在Node的I/O循环中发送大文件),我认为Nginx正确地从Node下载的假设是错误的。我犯了几个错误,这意味着NginxXSendfile无法工作,而Node仍在处理响应。
我有一个语法错误:
要设置响应头,以下是正确的语法:
response.header('X-Accel-Redirect', file.path);使用上面的头部(doh!)时,不应该设置响应的正文。
对于快速/连接/节点,只需使用X-Accel- #send报头重定向响应,并使用response#attachment设置Content-Disposition
response.attachment(file.name);
response.send();发布于 2016-02-13 00:58:36
除了X-Accel-Redirect之外,我还必须向响应头添加一个Content-Disposition
Express.js代码:
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)
server {
location /files {
internal;
root /home/user;
}
}这服务于/home/user/files中的文件test.txt (即/home/user/files/test.txt)。
https://stackoverflow.com/questions/10002518
复制相似问题