当前位置: 首页 > java >正文

PHP文件下载

流程

  1. 获取要下载的文件路径,若为网络文件在php处理时需转为本地路径
  2. php处理,判断是否为文件,或者防注入等处理参数
  3. 设置header,执行下载

页面

<div><h2>DOWNLOAD</h2><ul><li v-for="(value,key) in dirfiles" :key="key"><a :href="'download.php?path='+value" target="_blank">{{value}}</a></li></ul>
</div>

vue3

let dirfiles =  ref(null);
function getfiles(){const url ="getfiles.php";axios.get(url).then(res=>{dirfiles.value = res.data.data}) .catch(error => {console.error('获取文件失败', error);});
}

php处理

//getfiles.php
include_once "common.php";
$dir = PATH_UPLOAD;
function opendors($dir, $filelist = []) {if ($handle = opendir($dir)) {while (false !== ($file = readdir($handle))) {// 过滤掉当前目录和上一级目录if ($file != "." && $file != "..") {$path = $dir . "/" . $file;if (is_dir($path)) {$filelist = opendors($path, $filelist);} elseif (is_file($path)) {array_push($filelist, $path);}}}closedir($handle);}return $filelist;
}
$filelist = opendors($dir);backjson(1, "获取成功", $filelist);
//download.php
$params = $_GET;
var_dump($params);
$path = $params['path'];
if (!is_file($path)) {backjson(1, "文件不存在");
}
$fileinfo = pathinfo($path);
var_dump($fileinfo);
$filename = $fileinfo['basename'];
$filesize = filesize($path);//设置表头
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=' . $filename);
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . $filesize);
readfile($path);
exit;

http://www.xdnf.cn/news/16202.html

相关文章:

  • Lua(字符串)
  • 图论:搜索问题
  • linus 环境 tomcat启动日志分隔
  • LeetCode31~50题解
  • LeetCodeOJ题:回文链表
  • CAN总线仲裁中的延时补偿机制
  • Lua(文件I/O)
  • 【XGBoost】两个单任务的模型 MAP - Charting Student Math Misunderstandings
  • 游戏开发Unity/ ShaderLab学习路径
  • 光伏电站巡检清扫飞行机器人设计cad【6张】三维图+设计说明书
  • Java 中 Future 与 Callable 的使用详解
  • 3D Semantic Occupancy Prediction
  • Django 科普介绍:从入门到了解其核心魅力
  • 【Newman+Jenkins】实施接口自动化测试
  • 时间日期选择器组件进行日期和时间的禁用处理逻辑
  • IntelliJ IDEA中管理多版本Git子模块的完整指南
  • useContext
  • 前端学习日记(十二)
  • 三级知识点汇总(详解)【c++】——7
  • Java并发编程第八篇(CountDownLatch组件分析)
  • 基础入门 [CMD] Windows SSH 连接服务器教程(系统自带方式)
  • FreeRTOS—计数型信号量
  • Django基础(八)———数据库外键及表关系
  • Cisco 主模式配置
  • iOS Core Data 本地数据库 使用详解:从模型关系到数据操作
  • Python(09)正则表达式
  • HTTP性能优化实战:从协议到工具的全面加速指南
  • 大语言模型中提示词技术的原理、演进与未来发展研究
  • 基于Qt和OpenCV的图片与视频编辑器
  • 从0到1学习c++ 命名空间