nginx,静态资源下载

300 阅读1分钟

背景

前端:张同学,这个音频文件浏览器可识别,不能下载呀,后端可以下载之后返回文件流给前端🐎

后端:这个不行吧~~,主要是因为这个资源在第三方,后端需要用ftp连接去下载,ftp不稳定,并且会产生很多垃圾文件在后端,所以,前端💪

前端:好吧,那前端研究下,本着知多不伤脑的原则,前端去研究,并且demo成功后,在给运维配置

nginx配置

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    # include servers/mobile.conf;
    # include servers/app.conf;
    
    server {
        listen 7890;
        server_name www.test.me;

        location / {
            proxy_pass https://dpic.tiankong.com; #转发地址

            #Proxy Settings
            proxy_redirect     off;
            proxy_set_header   Host     dpic.tiankong.com;  #$host;不能使用$host变量
            proxy_set_header   X-Real-IP        $remote_addr;
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
            proxy_hide_header Content-Disposition;
            add_header    Content-Disposition "attachment; filename=$arg_filename";
            proxy_next_upstream error timeout invalid_header;
            proxy_max_temp_file_size 0;
            proxy_connect_timeout      90;
            proxy_send_timeout         90;
            proxy_read_timeout         90;
            proxy_buffer_size          4k;
            proxy_buffers              4 32k;
            proxy_busy_buffers_size    64k;
            proxy_temp_file_write_size 64k;
        }
    }
}

这个配置中,需要重点关注的是Content-Disposition这个字段,下面详解下

Content-Disposition

mdn: developer.mozilla.org/zh-CN/docs/…

作为Respone Headers中的字段返回,第一个参数:inline(默认参数,表示该消息作为页面的一部分或者整个页面存在),或者是attachment(表示该消息是需要被下载到本地,通常浏览器会有"保存为"的提示框,如果filename存在,则就是下载文件的文件名)

Content-Disposition: inline
Content-Disposition: attachment
Content-Disposition: attachment; filename="filename.jpg"

这是通过window.open('www.test.me')就会被转发到 “dpic.tiankong.com”并且下载文件

如有错误,请提出,谢谢🌹🌹🌹🌹