如何在浏览器,nginx服务器中强制下载文件

时间:2012-01-29 15:35:47

标签: nginx mime-types

我目前有两个图像位置,它们可能是格式(jpg,jpeg,png,gif)

i.domain.com/simage.jpg thumbnail
i.domain.com/image.jpg high quality
i.domain.com/o/image.jpg full resolution

有谁知道如何强制/ o /下载图像文件而不是在网络浏览器中渲染?

这是我的配置文件:http://pastebin.com/dP8kZMzx

#setup subdomain i.domain.com
server {
    server_name i.domain.com;
    access_log /var/log/nginx/i..com.access.log;
    error_log /var/log/nginx/i.domain.com.error.log;

    root /var/www/domain.com/test1/images;
    index index.php index.html index.htm;

    #error_page 403 = /notfound.jpg;
    #error_page 500 = /notfound.jpg;

    location / {            
        #change this to a 404 img file .jpg
        try_files $uri $uri/ /notfound.jpg;

        rewrite  "/s([A-Za-z0-9.]+)?" /small/$1 break;
        rewrite  "/o/([A-Za-z0-9.]+)?" /orig/$1 break;
        rewrite  "/([A-Za-z0-9.]+)?" /medium/$1 break;
    }

}

4 个答案:

答案 0 :(得分:22)

您只需要返回HTTP标头Content-disposition

location ~* /orig/(.+\.jpg)$ {
    add_header Content-disposition "attachment; filename=$1";
}

答案 1 :(得分:6)

我一直在尝试将此功能放入我自己的nginx服务器中。

我在服务器上有一个文件夹,我想对知道路径的人开放。

为此,我在我的nginx配置文件中添加了/ file / location。

server {
   listen 80;
   server_name example.com;

   location /file/ {
       alias /var/openStuff/file/;
       add_header Content-disposition "attachment";
   }
}

对example.com/file/x的任何请求都将转至/ var / openStuff / file并查找x并强制浏览器下载文件

如果路径是/file/stuff/things.txt并且将从/var/openStuff/file/stuff/things.txt

提供它,这也会有效。

答案 2 :(得分:1)

以下配置适合我。

server {
    ...
    # Django media
    location /media  {
        alias /var/www/media;  
        types { application/octet-stream .pdf; }
        default_type application/octet-stream;
    }
    ...
}

但pdf文件需要以小写pdf结尾才能下载。我仍然不知道将.pdf和.PDF添加到上面的配置文件的语法。有什么建议吗? 答案基于http://210mike.com/force-file-download-nginx-apache/

的信息

答案 3 :(得分:0)

一点点混合对我来说就好了。强制下载CRX文件,而不是安装或显示。

## Download crx
location ~* \.crx$ {
    add_header Content-disposition "attachment; filename=$1";
}