背景
前端:张同学,这个音频文件浏览器可识别,不能下载呀,后端可以下载之后返回文件流给前端🐎
后端:这个不行吧~~,主要是因为这个资源在第三方,后端需要用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”并且下载文件
如有错误,请提出,谢谢🌹🌹🌹🌹