网站首页 > 技术教程 正文
最近做的项目有个工具库模块,需要实现工具的上传与下载。上传与下载都使用的是Laravel内置的方法,本来都没什么问题,今天无意上传了一个两百多M的文件,上传很顺利,但当点击下载时,发现会出现下载回来的数据不全的情况。暂时没找到是什么原因,估计是内存方面的问题。
修改了几次代码后都无法解决,那就只能换一种方式了。多次搜索后,发现了一种直接返回 x-sendfile 头实现文件下载方式,完美解决了我的问题。
Nginx
Nginx默认支持x-sendfile模式,所以使用起来十分方便。
虚拟域名的配置文件,添加如下内容
#伪造下载路径
location /down/{
internal; #只允许内部访问,防止盗链
alias /home/www/myweb/public/uploads/utool/;
}
PHP返回header头
$filename = 'test.zip';
$file_path = '/down/test.zip';//物理真实路径是 /home/www/myweb/public/uploads/utool/test.zip ,至于为什么请自行脑补
header('Content-type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.$filename.'"');
header('X-Accel-Redirect:'.$file_path);
就这么轻松的两步就实现了大文件的下载,是不是很简单。
Apache
Apache需要加载 module mod_xsendfile 模块来实现相对应的功能,所以稍微复杂一点
加载 module mod_xsendfile
从[项目地址](https://github.com/nmaier/mod_xsendfile)上下载对应的 mod_xsendfile.so,放到apache的modules目录下.然后修改 http.conf ,添加如下内容
LoadModule xsendfile_module modules/mod_xsendfile.so
开启 xsendfile
修改虚拟域名的配置文件,添加如下内容
# 开启XSendFile
XSendFile On
<Directory "D:/wamp/www/myweb/public/uploads/utool/">
# 只允许本地链接,防止盗链
<IfDefine APACHE24>
Require local
</IfDefine>
</Directory>
PHP返回header头
$filename = 'test.zip';
$file_path = 'D:/wamp/www/myweb/public/uploads/utool/test.zip';
header('Content-type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.$filename.'"');
header('X-Sendfile:'.$file_path);
使用 x-sendfile 模式后,PHP只需返回header头,后续就不需要处理,所以效率有了明显提升。
如果在下载过程中,出现中文文件名乱码的情况,可以使用函数 **rawurlencode** 对文件名做转码,这样就能解决乱码问题。
- 上一篇: CDN上的一些细节处理经验技巧(cdn操作教程)
- 下一篇: 从一道百度面试题说起(百度面试难么)
猜你喜欢
- 2024-10-17 Apache服务优化(apache性能优化)
- 2024-10-17 2019最新整理PHP面试题附答案(php面试题汇总)
- 2024-10-17 快速提高 WordPress 外贸独立网站速度的方法
- 2024-10-17 从一道百度面试题说起(百度面试难么)
- 2024-10-17 CDN上的一些细节处理经验技巧(cdn操作教程)
- 2024-10-17 IT运维面试问题总结-运维(Ceph、Docker、Apache、Nginx等
- 2024-10-17 为什么别人网站上的图片下载不了?手把手教你如何做到
- 2024-10-17 Linux curl 常用示例你都 Get 了吗?| CSDN 博文精选
- 2024-10-17 Nginx防盗链设计(nginx安全防护)
- 2024-10-17 Linux Centos7下实现nginx防盗链部署
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- 下划线是什么 (87)
- 精美网站 (58)
- qq登录界面 (90)
- nginx 命令 (82)
- nginx .http (73)
- nginx lua (70)
- nginx 重定向 (68)
- Nginx超时 (65)
- nginx 监控 (57)
- odbc (59)
- rar密码破解工具 (62)
- annotation (71)
- 红黑树 (57)
- 智力题 (62)
- php空间申请 (61)
- 按键精灵 注册码 (69)
- 软件测试报告 (59)
- ntcreatefile (64)
- 闪动文字 (56)
- guid (66)
- abap (63)
- mpeg 2 (65)
- column (63)
- dreamweaver教程 (57)
- excel行列转换 (56)
本文暂时没有评论,来添加一个吧(●'◡'●)