博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
FastDFS 使用经验分享
阅读量:5864 次
发布时间:2019-06-19

本文共 1810 字,大约阅读时间需要 6 分钟。

原文:http://www.ttlsa.com/fastdfs/fastdfs-experience-sharing/

 

应用背景

文件被上传到Fast后Storage服务端将返回的文件索引(FID),其中文件名是根据FastDFS自定义规则重新生成的,而不是原始文件名,例如: group2/M00/00/89/eQ6h3FKJf_PRl8p4AUz4wO8tqaA688.apk

使用http下载时如不加处理,显示给用户的文件名会是这样的eQ6h3FKJf_PRl8p4AUz4wO8tqaA688.apk,这样的用户体验很不好。由于FastDFS不会存储原始文件名,也没有提供恢复原始文件名的方法,所以需要应用系统自己想办法恢复原始文件名。

解决方法

通过在项目中多次尝试,找到一种较简单的实现方法,实现过程如下:

一. 应用系统在上传文件到FastDFS成功时将原始文件名“文件索引(FID)”保存下来(例如:保存到数据库)。

二. 用户点击下载的时用的域名FID拼出url,然后在url后面增加一个参数,指定原始文件名。例如:http://121.14.161.48:9030/group2/M00/00/89/eQ6h3FKJf_PRl8p4AUz4wO8tqaA688.apk?attname=filename.apk

三. 在Nginx上进行如下配置,这样Nginx就会截获url中的参数attname,在Http响应头里面加上字段 Content-Disposition “attachment;filename=$arg_attname”。

 

location /group2/M00 {root /data/store/data;if ($arg_attname ~ "^(.*).apk") {    add_header Content-Disposition "attachment;filename=$arg_attname";}ngx_fastdfs_module;}

 

四. 浏览器发现响应头里面有Content-Disposition “attachment;filename=$arg_attname”时,就会把文件名显示成filename指定的名称。

完整的请求和响应消息如下:

请求包:

返回包:

转载地址:http://agunx.baihongyu.com/

你可能感兴趣的文章
ECSHOP怎樣可以取消用手机上网时,不自动转到mobile页面
查看>>
PHP中的书写规则与命名规范
查看>>
Sql 常见操作
查看>>
ClistCtrl
查看>>
smarforms传输内表方法
查看>>
IOS使用通知回调方法
查看>>
无法获得VMCI 驱动程序的版本: 句柄无效。
查看>>
[工具类]缓存辅助类
查看>>
完成登录功能,用session记住用户名
查看>>
HOG特征过程解释(转)
查看>>
用户体验报告——礼物说
查看>>
poj 1164城堡问题(DFS)
查看>>
Apache-Maven 的安装及配置
查看>>
js兼容性的坑
查看>>
jquery获取文件名称
查看>>
js函数中参数的传递
查看>>
例题9-10 UVa1626&&POJ1141 Brackets Sequence(DP)
查看>>
Android设备信息、感应器检测
查看>>
ThinkPHP框架目录的介绍
查看>>
Python note
查看>>