FastDFS使用之文件名称
应用背景
文件被上传到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”。
![](/assets/blank.gif)
location /group2/M00 { root /data/store/data; if ($arg_attname ~ "^(.*).apk") {add_header Content-Disposition "attachment;filename=$arg_attname"; } ngx_fastdfs_module; }
![](/assets/blank.gif)
四. 浏览器发现响应头里面有Content-Disposition “attachment;filename=$arg_attname”时,就会把文件名显示成filename指定的名称。
完整的请求和响应消息如下:
请求包:
![](/assets/blank.gif)
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
![](/assets/blank.gif)
返回包:
![](/assets/blank.gif)
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
![](/assets/blank.gif)
FastDFS使用之文件名称相关推荐
- fdfs往服务器上传文件超时,FastDFS 实现大文件分片上传
1.引入fastdfs com.github.tobato fastdfs-client 1.25.2-RELEASE cn.hutool hutool-all 4.0.12 2.编写控制层Contr ...
- 【运维实战】1.FastDFS分布式的文件存储系统入门介绍与实践
本章目录 0x00 基础介绍 0.前言 1.简介 2.特性 3.架构 Tracker Server Storage Server Client 4.存储策略 5.过程剖析 文件上传 - Upload ...
- FastDFS 设计理念、文件上传、下载、同步、删除和断点续传原理
一.FastDFS 系统架构和功能原理 1.架构详解 storage server:存储服务器(又称存储节点或数据服务器),文件和文件属性(meta data)都保存到存储服务器上.Storage s ...
- LINUX环境下资源下载中文目录及中文文件名称问题
为什么80%的码农都做不了架构师?>>> http://www.yeeach.com/2009/04/09/linux%E7%8E%AF%E5%A2%83%E4%B8%8B%E ...
- 小技巧 | 使用 mv 重命名文件无需两次键入文件名称
使用过 Bash 的童鞋都知道 mv 是一个可以用于文件改名的命令,而且使用这个命令修改文件名时我们需要输入两次文件名(旧名字和新名字). 如果有一种情况是只需要你改动文件名中的一个字母,而文件名又特 ...
- 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 ...
- 批量修改文件名称(Python)
本程序功能:批量修改文件名称 import os import redef replaceDirName(rootDir): # 修改rootDir路径下的文件夹名num = 0dirs = os.l ...
- python读取文件名存到list_python读取文件名称生成list的方法
下面为大家分享一篇python读取文件名称生成list的方法,具有很好的参考价值,希望对大家有所帮助.一起过来看看吧 经常需要读取某个文件夹下所有的图像文件. 我使用python写了个简单的代码,读取 ...
- 查看linux文件的权限:ls -l 文件名称
查看linux文件的权限:ls -l 文件名称 查看linux文件夹的权限:ls -ld 文件夹名称(所在目录) 修改文件及文件夹权限: sudo chmod -(代表类型)×××(所有者)×××(组 ...
- php获取文件名称和扩展名
1.basename()-返回路径的文件名 请看下面php代码: 1 <?php 2 3 $path = "/usr/www/html/index.php"; 4 5 ech ...
最新文章
- python3.5安装教程-Python 3.5安装教程
- 属于PHP语言结构的是,PHP语言结构
- 【广搜】Keyboarding
- 2021年自然语言处理(NLP)算法学习路线!
- 如何使用Python的Flask和Google App Engine构建网络应用
- SQLServer优化资料整理(二)
- arp协议属于哪一层_TCP/IP协议栈-之-ARP协议分析
- CentOS下通过yum安装svn及配置
- 如何将爬虫获得的数据变为字典的key_Python爬虫第二战 爬取500px图片
- 第二篇:基于小米手机的,第三方recovery教学
- Creo 由方程创建曲线
- 软件评测师--第11小时 安全测试和评估
- 什么是javabean及其用法(转)
- html给图片加个放大效果鼠标经过,网页制作-如何在制作鼠标经过时图片放大效果...
- 鸿蒙系统国内厂商,谷歌自食其果,华为鸿蒙系统已经被启用,国内厂商或将弃用安卓...
- pandas画双柱形图
- 博雅互动android面试题,【博雅互动怎么样?】-看准网
- GPU深度学习训练时出现train_loss一直不变且val_loss不变的问题
- C语言实验——用*号输出字母C的图案
- .NET 中关于ImageList 图片锯齿问题