应用背景
1 |
文件被上传到FastDFS后Storage服务端将返回的文件索引(FID),其中文件名是根据FastDFS自定义规则重新生成的,而不是原始文件名,例如: group1/M00/00/00/wKgGe15Ut3CAZcnmAA98T7dRZ0c.tar.gz |
使用http下载时如不加处理,显示给用户的文件名会是这样的wKgGe15Ut3CAZcnmAA98T7dRZ0c.tar.gz,这样的用户体验很不好。由于FastDFS不会存储原始文件名,也没有提供恢复原始文件名的方法,所以需要应用系统自己想办法恢复原始文件名。
解决方法1
通过在项目中多次尝试,找到一种较简单的实现方法,实现过程如下:
1 2 3 4 5 6 |
一. 应用系统在上传文件到FastDFS成功时将原始文件名和“文件索引(FID)”保存下来(例如:保存到数据库)。 二. 用户点击下载的时用Nginx的域名和FID拼出url,然后在url后面增加一个参数,指定原始文件名。例如: http://192.168.6.124:8888/group1/M00/00/00/wKgGe15Ut3CAZcnmAA98T7dRZ0c.tar.gz?attname=shooter.tar.gz 三. 在Nginx上进行如下配置,这样Nginx就会截获url中的参数attname,在Http响应头里面加上字段 Content-Disposition "attachment;filename=$arg_attname" |

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
server { listen 8888; server_name localhost; location ~/group([0-9])/M00 { alias /data-fdfs/storage/data; add_header Content-Disposition "attachment;filename=$arg_attname"; ngx_fastdfs_module; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } access_log /usr/local/nginx/logs/access.log main; } |

- 本文固定链接: https://www.yoyoask.com/?p=2107
- 转载请注明: shooter 于 SHOOTER 发表