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命令的组合.它的使用权限是所有用户. ...
随机推荐
- Python-面向对象 (二 继承)
一 继承 基类定义例如以下: class people: #define attribute name = '' age = 0 #define private ...
- Android 手机设置CMWAP 接入点
Android 手机设置CMWAP 接入点 设置--- 无限控件---移动网络设置---接入点名称----再按菜单---选择新apn 第一步,设置CMNET 上网APN 新建 APN 1.名称:cmn ...
- iOS7与iOS8的比較
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGl1c2h1d2VpMDIyNA==/font/5a6L5L2T/fontsize/400/fill/I0 ...
- Java对证书的操作
1 Java程序从证书文件读取证书 import java.io.*; import java.security.cert.*; public class PrintCert{ public stat ...
- [AngularJS] Best Practise - Module
Module definitions Angular modules can be declared in various ways, either stored in a variable or u ...
- System.setProperty()
/* * 设置指定键对值的系统属性 * setProperty (String prop, String value); * * 參数: * prop - 系统属性的名称. * value ...
- centos 安装http协议的git server
1.服务器端安装httpd,git,gitweb等 1 #yum install httpd git git-daemon gitweb 2.服务器端初始化仓库 1 2 3 #mkdir -p /d ...
- 更换VS2012序列号的方法
转自:http://blog.sina.com.cn/s/blog_58c506600101ja49.html 今天不小心把还在试用期内的VS2012 Ultimate填上盗版Key激活了……找遍了菜 ...
- 修改FFMpeg源码—捕获丢包
概述 最近我们项目有一个需求就是解决客户端播放RTSP视频流花屏的问题,一般来说丢包就会引起花屏,导致客户端花屏的因素又有很多,比如说: 相机到服务器丢包 服务器到客户端丢包 等等... 其中服务器到 ...
- iOS 应用有用户评论功能 因为潜在色情信息被退回解决方案
应用的每一次退回都是一次很好的学习机会 这次是说我的应用没有对色情的内容进行监管或屏蔽的管理机制 这里我主要是 评论页面 违法 如下 以下提供几种解决方案: 1.按照苹果给的建议 我们添加协议进去 ...