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

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.lryc.cn/news/598093.html

相关文章:

  • Edwards爱德华泵软件 支持nEXT85和nXDS系列泵,包括nXRi, nRVi和nXLi增强型 nEXT nXDS nXLi
  • 二分查找----4.搜索旋转排序数组
  • 【STM32】FreeRTOS 任务的删除(三)
  • 力扣面试150题--在排序数组中查找元素的第一个和最后一个位置
  • C++ - 仿 RabbitMQ 实现消息队列--服务端核心模块实现(三)
  • MapStruct类型转换接口未自动注入到spring容器中
  • 点击按钮滚动到底功能vue的v-on:scroll运用
  • 大模型微调学习笔记(基于讯飞星辰MaaS速学版)
  • Hive常用函数
  • CSDN技术专栏开篇:高效开发环境搭建指南
  • 重构数据库未来:金仓数据库,抢占 AI 原生时代先机
  • 基础NLP | 01 机器学习 深度学习基础介绍
  • uni-appDay02
  • uniapp中flex布局gap属性兼容处理
  • LockPatternUtils中比较重要的方法
  • day46.通道注意力
  • 【SpringAI实战】FunctionCalling实现企业级自定义智能客服
  • Quarkus利用 MicroProfile 实现微服务特性
  • 基于深度学习的图像分类:使用EfficientNet实现高效分类
  • 期货交易系统:市场生态中的功能映射与价值逻辑
  • uni-app小程序云效持续集成
  • Etcd原理基础学习
  • Java 垃圾回收器之CMS GC问题分析与解决
  • 二分查找----5.寻找旋转排序数组中的最小值
  • fabric搭建基础的测试网络
  • ARM 学习笔记(四)
  • 若依框架在 IDEA 中运行的前置软件环境配置指南
  • AI开放课堂:钉钉MCP开发实战
  • 4种灵活的方法从POCO手机中删除联系人
  • 移动管家手机控车便捷性如何