使用 Rails & nginx 发送 zip 文件

Sending a zip file with Rails & nginx

当使用 nginx 作为代理时,我无法下载 zip 文件(使用 send_file)。

def download
  send_file file_path, filename: "file.zip"
end

运行 没有 nginx(仅限 webrick)它工作正常但是使用 nginx 代理它在浏览器中打开它:

Nginx 代理配置:

server {
    server_name mydomain.com;

    location / {
        proxy_pass http://localhost:3001;
        proxy_set_header Host $host;
        auth_basic "Restricted";
        auth_basic_user_file /etc/nginx/keys/app.htpasswd;
    }
}

编辑:

重新加载页面会导致文档被下载,因此我查看了每个请求的请求 headers。它们应该是相同的,但它们不是。

在浏览器中打开

下载成功

唯一不同的是,第一个我点击了 link(在新标签页中打开 link 下载并打开文件),我在第二个上刷新了页面。

编辑 2:

我用 webrick 又试了一次,它在做同样的事情。

您还应该发送文件头并确保它们通过 nginx 传递。您可以通过在网络选项卡中监视浏览器的请求和响应来轻松验证这一点

原来是 turbolinks 导致了问题。我必须将 data: {turbolinks: false} 添加到我的 link_to 标签中。

另请参阅:Rails 4, asset pipeline causes user downloadable files to be downloaded twice, rails won't send_data as file, Ruby on Rails send_file, code in controller action running twice, Ruby on Rails send_file doesn't work until i refresh the page?