php nginx fastdfs 下载文件重命名
其实fdfs可以传入一个filename参数,指定文件名。。
M00/00/00/fwAAAVGMateAafjTAAAABBW-xbM368.txt?filename=test.txt
这样下载时用户将得到test.txt文件名啦。
////以下内容仅供娱乐
首先搭好fastdfs
然后安装nginx 和 fastdfs-nginx模块
配置好nginx
这里网上有详细教程。
现在问题是,我们下载文件都是fdfs转换后的文件名,这对于用户来说是不友好的。
比如用户通过网站上传一个 小说.txt 的文件,然后提交到fdfs后,文件名将变成一串字母的组合。
当其他用户下载的时候,得到的文件却不是 小说.txt ,很不友好。
这里有解决方案。
首先,你可以通过网站数据库保存文件的原来文件名。
然后下载的时候,可以通过php 用readfile()从真实路径读取文件,输出的时候通过指定head头来改变文件名。
但是用readfile()带来了额外的I/O开销,流量一大,会加重服务器负担。
这里还有一种办法,那就是通过linux自带的sendfile功能,让nginx直接从真实地址读取文件并发送给用户,并且还可以重命名。
需要做的就是在 download.php 中,写入以下头:
header("Content-Disposition: attachment; filename= 重命名文件名.txt");
header("Content-Type: application/octet-stream");
header('X-Accel-Redirect: M00/00/00/fwAAAVGMateAafjTAAAABBW-xbM368.txt'); //fdfs文件路径
header("X-Accel-Buffering: yes");
header("X-Accel-Limit-Rate :102400"); //速度限制 Byte/s
//header("Accept-Ranges: none");//单线程 限制多线程
这样就ok了,当你在浏览器中打开download.php时,php输出这些头信息,会被nginx捕捉到,然后直接重定向到X-Accel-Redirect这个文件,直接发送给用户,同时filename头也是生效的。
这样做不仅隐藏了真实文件地址,而且可以重命名文件,很好,很强大!
备注:
在 nginx配置文件中
location /M00/
{
internal;
root /fdfs_storge/data/;
ngx_fastdfs_module;
}
这里面如果加上internal;表示这个url只允许内部访问,这时候你再直接从浏览器中下载fdfs文件,将提示404错误。只能通过download.php下载。
php nginx fastdfs 下载文件重命名的更多相关文章
- 关于scrapy下载文件重命名的办法以及对应url没有文件后缀的办法
https://www.jianshu.com/p/d1bb28cbb6a8 scrapy中负责下载文件的是class MyFilesPipeline(FilesPipeline)类 其中负责下载文件 ...
- Asp.Net MVC 文件管理Demo(文件展示,上传,下载,压缩,文件重命名等)
之前 ,有想做一个文件管理页面. 参考了 许多资料,终于完成了一个基于Asp.net MVC 的文件管理Demo.界面如下. 一,实现功能及相关技术 文件管理Demo基于Asp.NET MVC , ...
- Java用来进行批量文件重命名,批量提取特定类型文件
原因: 因为在网上下载视频教程,有的名字特别长,一般都是机构或者网站的宣传,不方便直接看到视频的简介,所以做了下面的第一个功能. 因为老师发的课件中,文件夹太多,想把docx都放在同一个文件夹下面,一 ...
- Python实例31[批量对目录下文件重命名]
经常会遇到下载的文件或电子书,名字中间都包含了一些网址信息,实际使用中由于名字太长不方便,下面的脚本使用正则表达式来对目录下的所有文件重命名:例如: 修改前:[大家网]Mac OS X for Uni ...
- mac常用快捷键,Mac文件重命名快捷键,Mac OS快速访问系统根目录, MacOS 10.11重要数据的存储位置大全
command+r,相当于F5,刷新页面 command+F5,启动voiceover command+q 关闭当前程序 在Finder中command+/ 打开底部状态栏,可以查看剩余磁盘空间大小 ...
- 文件重命名工具(ReNamer)7.2中文绿色便携专业版
ReNamer 是一个非常强大和灵活的文件重命名工具,它提供所有标准的重命名过程,包括前缀.后缀.替换.大小写更改以及删除括号内容.添加编号规则.更改文件扩展名等.对于高级用户,支持正则表达式和 Pa ...
- 【Java EE 学习 22 上】【文件上传】【目录打散】【文件重命名】
1.文件上传概述 (1)使用<input type="file">的方式来声明一个文件域. (2)表单提交方式一定要是post方式才行 (3)表单属性enctype 默 ...
- git 文件重命名
文件重命名 git mv old_name new_name git commit -m 'rename' git push origin master 删除文件 git rm filename
- Linux下文件重命名、创建、删除、修改及保存文件
一.重命名(更名) linux 给文件改名的命令是mv命令 mv命令来为文件或目录改名或将文件由一个目录移入另一个目录中.该命令等同于DOS系统下的ren和move命令的组合.它的使用权限是所有用户. ...
随机推荐
- android一些系统相关的东西
添加快捷方式和删除快捷方式: private void addShortcut() { Intent shortcut = new Intent( "com.android.launcher ...
- 保持长宽比 对背景图像进行修改android:scaleType="fitXY"
关于android中ImageView的外观,即图片在其内显示出的样子,与布局文件中adjustViewBonds和scaleType属性的关系.我进行了一些探索.现跟大家共享,欢迎各位指教.分别将a ...
- dom4j生成、解析xml
/** * 创建xml * @param obj 泛型对象 * @param entityPropertys 泛型对象的List集合 * @param Encode XML自定义编码类型 * @par ...
- [Angular2 Form] Create Radio Buttons for Angular 2 Forms
Using Radio Buttons in Angular 2 requires a basic understanding of forms as well as how their labels ...
- HDU1003 Max Sum(求最大字段和)
事实上这连续发表的三篇是一模一样的思路,我就厚颜无耻的再发一篇吧! 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1003 -------------- ...
- MySQL中内存分为全局内存和线程内存
首先我们来看一个公式,MySQL中内存分为全局内存和线程内存两大部分(其实并不全部,只是影响比较大的 部分): 复制代码 代码如下: per_thread_buffers=(read_buffer_s ...
- 终端I/O之终端选项标志
http://www.cnblogs.com/nufangrensheng/p/3575752.html 中的表18-1至表18-4中列出的所有选项标志(除屏蔽标志外)都用一位或几位(设置或清除)表示 ...
- ci框架学习中注意的事项
视图: 加载视图:$this->load->view('name'); 一次可以加载多个视图,如: public function index() { $data['page_title' ...
- 编写一个简单的Jquery插件
1.实现内容 定义一个简单的jquery插件,alert传递进来的参数 2.插件js文件(jquery.showplugin.js) (function ($) { //定义插件中的方法 var me ...
- 3. Android框架和工具之 xUtils(ViewUtils )
1. ViewUtils 作用: 完全注解方式就可以进行UI绑定和事件绑定. 无需findViewById和setClickListener等. 2. UI绑定 和 事件绑定 (1)UI绑定 下面我們 ...