应用背景

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

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

解决方法

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

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

二. 用户点击下载的时用Nginx的域名和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指定的名称。

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

请求包:

Request URL:http://121.14.161.48:9030/group2/M00/00/89/eQ6h3FKJf_PRl8p4AUz4wO8tqaA688.apk?attname=filename.apk
Request Method:GET
Status Code:200 OK
Request Headersview source
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding:gzip,deflate,sdch
Accept-Language:zh-CN,zh;q=0.8,en;q=0.6
Connection:keep-alive
Host:121.14.161.48:9030
Referer:http://appandroidpcfront.test.uae.uc.cn/apps
User-Agent:Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36
Query String Parametersview sourceview URL encoded
attname:filename.apk

返回包:

Response Headersview source
Accept-Ranges:bytes
Connection:keep-alive
Content-Disposition:attachment;filename=filename.apk
Content-Length:21821632
Date:Thu, 28 Nov 2013 11:40:46 GMT
Last-Modified:Mon, 18 Nov 2013 02:48:19 GMT
Server:nginx/1.4.3

FastDFS使用之文件名称相关推荐

  1. fdfs往服务器上传文件超时,FastDFS 实现大文件分片上传

    1.引入fastdfs com.github.tobato fastdfs-client 1.25.2-RELEASE cn.hutool hutool-all 4.0.12 2.编写控制层Contr ...

  2. 【运维实战】1.FastDFS分布式的文件存储系统入门介绍与实践

    本章目录 0x00 基础介绍 0.前言 1.简介 2.特性 3.架构 Tracker Server Storage Server Client 4.存储策略 5.过程剖析 文件上传 - Upload ...

  3. FastDFS 设计理念、文件上传、下载、同步、删除和断点续传原理

    一.FastDFS 系统架构和功能原理 1.架构详解 storage server:存储服务器(又称存储节点或数据服务器),文件和文件属性(meta data)都保存到存储服务器上.Storage s ...

  4. LINUX环境下资源下载中文目录及中文文件名称问题

    为什么80%的码农都做不了架构师?>>>    http://www.yeeach.com/2009/04/09/linux%E7%8E%AF%E5%A2%83%E4%B8%8B%E ...

  5. 小技巧 | 使用 mv 重命名文件无需两次键入文件名称

    使用过 Bash 的童鞋都知道 mv 是一个可以用于文件改名的命令,而且使用这个命令修改文件名时我们需要输入两次文件名(旧名字和新名字). 如果有一种情况是只需要你改动文件名中的一个字母,而文件名又特 ...

  6. R语言使用basename函数获取数据链接地址中的文件名称(removes all of the path up to and including the last path separator )

    R语言使用basename函数获取数据链接地址中的文件名称(removes all of the path up to and including the last path separator (i ...

  7. 批量修改文件名称(Python)

    本程序功能:批量修改文件名称 import os import redef replaceDirName(rootDir): # 修改rootDir路径下的文件夹名num = 0dirs = os.l ...

  8. python读取文件名存到list_python读取文件名称生成list的方法

    下面为大家分享一篇python读取文件名称生成list的方法,具有很好的参考价值,希望对大家有所帮助.一起过来看看吧 经常需要读取某个文件夹下所有的图像文件. 我使用python写了个简单的代码,读取 ...

  9. 查看linux文件的权限:ls -l 文件名称

    查看linux文件的权限:ls -l 文件名称 查看linux文件夹的权限:ls -ld 文件夹名称(所在目录) 修改文件及文件夹权限: sudo chmod -(代表类型)×××(所有者)×××(组 ...

  10. php获取文件名称和扩展名

    1.basename()-返回路径的文件名 请看下面php代码: 1 <?php 2 3 $path = "/usr/www/html/index.php"; 4 5 ech ...

最新文章

  1. python3.5安装教程-Python 3.5安装教程
  2. 属于PHP语言结构的是,PHP语言结构
  3. 【广搜】Keyboarding
  4. 2021年自然语言处理(NLP)算法学习路线!
  5. 如何使用Python的Flask和Google App Engine构建网络应用
  6. SQLServer优化资料整理(二)
  7. arp协议属于哪一层_TCP/IP协议栈-之-ARP协议分析
  8. CentOS下通过yum安装svn及配置
  9. 如何将爬虫获得的数据变为字典的key_Python爬虫第二战 爬取500px图片
  10. 第二篇:基于小米手机的,第三方recovery教学
  11. Creo 由方程创建曲线
  12. 软件评测师--第11小时 安全测试和评估
  13. 什么是javabean及其用法(转)
  14. html给图片加个放大效果鼠标经过,网页制作-如何在制作鼠标经过时图片放大效果...
  15. 鸿蒙系统国内厂商,谷歌自食其果,华为鸿蒙系统已经被启用,国内厂商或将弃用安卓...
  16. pandas画双柱形图
  17. 博雅互动android面试题,【博雅互动怎么样?】-看准网
  18. GPU深度学习训练时出现train_loss一直不变且val_loss不变的问题
  19. C语言实验——用*号输出字母C的图案
  20. .NET 中关于ImageList 图片锯齿问题

热门文章

  1. 两台计算机数据传输网线如何做,两台电脑连线传送数据(备份计算机资源)
  2. 优雅写代码的45个小技巧
  3. 交换机和路由器技术-11-VLAN Trunk
  4. JavaScript数组方法slice()
  5. Allegro导出dxf
  6. 微信小程序-分享页面到微信群或者好友携带分享者身份信息
  7. 百利药业IPO过会:扣非后年亏1.5亿 奥博资本是股东
  8. 网络骗术 索要佣金型
  9. 风格化(Stylization)
  10. 中国联通开放号码标记一键查询与清除服务