电商app开发 杭州整合营销 杭州seo优化公司 水族过滤棉厂家

php如何实现文件下载

php如何实现文件下载

  1. 设置超链接的href属性

  <ahref="文件地址"></a>

  如果浏览器不能解析该文件,浏览器会自动下载。而如果文件是图片或者txt,会直接在浏览器中打开。

  2. 输出文件流

  //download.php

  //页面加载的时候就调用

  downloadFile("3.rar","something.rar");

  //$filePath是服务器的文件地址

  //$saveAsFileName是用户指定的下载后的文件名

  function downloadFile($filePath,$saveAsFileName){

  // 清空缓冲区并关闭输出缓冲

  ob_end_clean();

  //r: 以只读方式打开,b: 强制使用二进制模式

  $fileHandle=fopen($filePath,"rb");

  if($fileHandle===false){

  echo "Can not find file: $filePath\n";

  exit;

  }

  Header("Content-type: application/octet-stream");

  Header("Content-Transfer-Encoding: binary");

  Header("Accept-Ranges: bytes");

  Header("Content-Length: ".filesize($filePath));

  Header("Content-Disposition: attachment; filename=\"$saveAsFileName\"");

  while(!feof($fileHandle)) {

  //从文件指针 handle 读取最多 length 个字节

  echo fread($fileHandle, 32768);

  }

  fclose($fileHandle);

  }

  杭州php工程师注:

  (1)download.php可以设置为<a>标签的href属性,点击<a>标签,则浏览器会提示下载。

  (2)jQuery模拟触发<a>的click事件时有bug,应该使用html对象的click方法。$('#hyperLink')[0].click();

  (3)jQuery Mobile会改变<a>的行为。所以,在使用jQuery Mobile时,无论手动点击还是java模拟点击,都会跳转到download.php页面,并不会触发下载。

     (4)location.href或location.replace定向到download.php也可以实现下载。这种方法不受jQuery Mobile的影响。

  (5)以上两种方法进行下载时,chrome会提示“Resource interpreted as Document but transferred with MIME type application/octet-stream”。为<a>增加html5属性download可以解决这个问题。<a href="..." download></a>而location.href或location.replace触发的下载,暂无办法解决。

posted on   菜鸟php工程师  阅读(1157)  评论(0编辑  收藏  举报

编辑推荐:
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
· ASP.NET Core 模型验证消息的本地化新姿势
· 对象命名为何需要避免'-er'和'-or'后缀
阅读排行:
· “你见过凌晨四点的洛杉矶吗?”--《我们为什么要睡觉》
· 编程神器Trae:当我用上后,才知道自己的创造力被低估了多少
· C# 从零开始使用Layui.Wpf库开发WPF客户端
· C#/.NET/.NET Core技术前沿周刊 | 第 31 期(2025年3.17-3.23)
· 开发的设计和重构,为开发效率服务

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

电商app开发 杭州整合营销 杭州seo优化公司 水族过滤棉厂家
点击右上角即可分享
微信分享提示