我们将文件上传到阿里OSS,用随机字符串命名(如“c7e282b1c79be5e9”),存到数据库就是一个文件的相对路径和文件信息。直接下载下来文件名就是一串随机字符串,文件多的话就不直观,难以查找。
我们想到下载的时候重命名,用a
标签。例如
<a href="https://cdn.xxx.com/img/c7e282b1c79be5e9.jpg" download="小狗.jpg">
因为oss是单独的域名访问,跨域a
标签的download
重命名就失效了。
这里提供一个解决方法是配置nginx转发,把文件的相对路径作为参数,访问当前域名的一个路径。
我们希望访问
https://www.xxx.com/cdn?url=img/c7e282b1c79be5e9.jpg
就能访问到
https://cdn.xxx.com/img/c7e282b1c79be5e9.jpg
可以在nginx这么配置
location /cdn {
resolver 119.29.29.29 114.114.114.114;
proxy_pass $arg_url;
}
但这样对有些浏览器可能不太支持,比如Safari,更进一步可以这样,原因是带了参数,我们可以改造成一个绝对路径。比如:
https://www.xxx.com/cdn/img/c7e282b1c79be5e9.jpg
这样nginx需要这么配置
location /cdn {
resolver 119.29.29.29 114.114.114.114;
proxy_pass https://cdn.xxx.com/;
}
原文
https://www.wugenglong.com/server/cross_domain_download_renaming_files.html