PHP文件下载

流程

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

页面

html 复制代码
<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

javascript 复制代码
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处理

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);
php 复制代码
//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;
相关推荐
AC赳赳老秦8 小时前
DeepSeek 私有化部署避坑指南:敏感数据本地化处理与合规性检测详解
大数据·开发语言·数据库·人工智能·自动化·php·deepseek
桃花键神15 小时前
Undetectable接入亮数据代理IP深度测评:高效、稳定、适配性极强的海外多账号运营利器
网络协议·tcp/ip·php
catchadmin16 小时前
PHP 8.5 #[\NoDiscard] 揪出“忽略返回值“的 Bug
php
oMcLin21 小时前
如何在 Debian 11 上实现基于 BGP 路由的动态负载均衡,提升跨地域数据中心的连接稳定性
debian·php·负载均衡
oMcLin21 小时前
如何在RHEL 9上配置并优化Kubernetes 1.23高可用集群,提升大规模容器化应用的自动化部署与管理?
kubernetes·自动化·php
ben9518chen1 天前
Linux文件系统基础
linux·服务器·php
电商API&Tina1 天前
京东 API 数据采集接口接入与行业分析
运维·服务器·网络·数据库·django·php
Sammyyyyy2 天前
Symfony AI 正式发布,PHP 原生 AI 时代开启
开发语言·人工智能·后端·php·symfony·servbay
码农水水2 天前
大疆Java面试被问:TCC事务的悬挂、空回滚问题解决方案
java·开发语言·人工智能·面试·职场和发展·单元测试·php