故事的起因是这样的资料上传应用的某云平台的 OSS ,使用的系统自动生成文件名所以就造成了一些不必要的问题,下载的时候无法自定义文件名,堂堂的云平台竟然不支持这个,很正常的需求呀,真有点 233333。
没办法只能靠自己了,好心疼自己的服务器、带宽、流量呀哦忘记了还有磁盘空间....这个云用的和不用的区别在哪呢,迫于代码修改的复杂故还是妥协了,使用NGINX代理来做吧。
http{
#设置反向代理文件配置
proxy_cache_path /home/file_cache levels=1:2 keys_zone=cache_one:500m inactive=2d max_size=30g;
.....#代表其它配置
server {
listen 80;
server_name *.*.*;#域名哈
location / {
if ($request_uri ~* \/(.*)\.(txt|doc|pdf|rar|gz|zip|docx|exe|xlsx|ppt|pptx|jpg|png)(\?filename=([^&]+))$) {
add_header Content-Disposition "attachment;filename=$arg_filename.$2";
}
proxy_cache cache_one;
proxy_cache_valid 200 304 302 48h;
proxy_pass *.*.*;
}
}
}
接下来我们来说代码解释
准备工作
nginx 要有反带的模块 proxy (一般情况下都有)>
image.png
我们来看进程中已经多了cahe 了
开始解释
proxy_cache_path /home/file_cache levels=1:2 keys_zone=cache_one:500m inactive=30d max_size=20g;
proxy_cache_path:表示缓存文件存放的路径,该路径是预先就要创建好的
levels=1:2 : 设置在相对于path指定目录的第几级hash目录中缓存数据,levels=1,表示一级hash目录,levels=1:2,表示两级hash目录,目录的名称是基于请求URL通过哈希算法得到的
keys_zone=cache_one:500m : 设置缓存名字 500 允许存储的最大大小
inactive=30d : 强制更新时间,在指定时间内没人访问,就删除缓存
max_size=20g : 设置硬盘中缓存数据的大小限制,最大缓存空间
至此完成
补充一点😜 就是
[请求的链接] (http://..*/JQ6mJ6A4Ey.pdf?filename=%E6%B5%8B%E8%AF%95%E6%96%87%E6%A1%A37)
补充一点 中间遇到了 浏览器不兼容中文的问题,从广大网友热心发布的内容中找到了一线生机
add_header Content-Disposition "attachment;filename=$arg_filename.$2;filename*=UTF-8''$arg_filename.$2";
"filename" 和 "filename" 两个参数的唯一区别在于,"filename"采用了 RFC 5987 中规定的编码方式。当"filename" 和 "filename" 同时出现的时候,应该优先采用"filename",假如二者都支持的话。
网友评论