php 页面中下载文件|图片

一、需求

页面中点击下载图片

二、实现

protected function pageLoad()
	{
	    $filePath = $_GET['file'];
        $host = $_SERVER['HTTP_HOST'];
        $file =  'http://'.$host.$filePath;
        $fileName = basename($filePath);
        $content = file_get_contents($file);
        ob_clean();
        $suffixArr = explode('.', $fileName);
        $suffix = strtolower($suffixArr[count($suffixArr)-1]);
        $suffixArr[count($suffixArr)-2] .= time();
        $fileName = implode('.', $suffixArr);
        $this->download($suffix, $content, $fileName);
	}

    private function download($extension,$content,$fileName='')
    {
        ob_clean();
        if($content)
        {
            switch ($extension)
            {
                case 'jpg':
                case 'jpeg':
                case 'jpe':
                case 'jfif':
                    header('Content-Type: image/jpeg');
                    if ($fileName)
                    {
                        header('Content-Disposition: attachment; filename='.$fileName);
                    }
                    break;
                case 'png':
                    header('Content-Type: image/png');
                    if ($fileName)
                    {
                        header('Content-Disposition: attachment; filename='.$fileName);
                    }
                    break;
                case 'bmp':
                    header('Content-Type: image/bmp');
                    if ($fileName)
                    {
                        header('Content-Disposition: attachment; filename='.$fileName);
                    }
                    break;
                case 'gif':
                    header('Content-Type: image/gif');
                    if ($fileName)
                    {
                        header('Content-Disposition: attachment; filename='.$fileName);
                    }
                    break;
                case 'tif':
                case 'tiff':
                    header('Content-Type: image/tiff');
                    if ($fileName)
                    {
                        header('Content-Disposition: attachment; filename='.$fileName);
                    }
                    break;
                case 'swf':
                    header("Content-type: application/x-shockwave-flash");
                    if ($fileName)
                    {
                        header('Content-Disposition: attachment; filename='.$fileName);
                    }
                    break;
                case 'doc':
                case 'docx':
                case 'ppt':
                case 'pptx':
                    $fileName = !empty($fileName)? $fileName:'';
                    header("Content-type: application/octet-stream");
                    header("Accept-Ranges: bytes");
                    header('Content-Disposition: attachment; filename='.$fileName);
                    header("Pragma:no-cache");
                    header("Expires:0");
                    break;
                case 'pdf':
                    $fileName = !empty($fileName)? $fileName:'';
                    header("Content-type: application/octet-stream");
                    header("Accept-Ranges: bytes");
                    header('Content-Disposition: attachment; filename='.$fileName);
                    header("Pragma:no-cache");
                    header("Expires:0");
                    break;
                case 'txt':
                    if ($fileName)
                    {
                        header("Content-type: application/octet-stream");
                        header("Accept-Ranges: bytes");
                        header('Content-Disposition: attachment; filename='.$fileName);
                        header("Pragma:no-cache");
                        header("Expires:0");
                    }
                    break;
                case 'html':
                    header("Cache-Control: no-cache, must-revalidate");
                    header("Pragma: no-cache");
                    header("Content-Type: application/force-download");
                    header("Content-type: text/html");
                    header("Content-Disposition: attachment; filename=".$fileName);
                    header("Content-Description: PHP5 Generated Data");
                    break;
                case 'xls':
                case 'xlsx':
                    $fileName = !empty($fileName)? $fileName:'';
                    header("Content-type:application/octet-stream");
                    header("Accept-Ranges:bytes");
                    header("Content-type:application/vnd.ms-excel");
                    header('Content-Disposition: attachment;filename='.$fileName);
                    header("Pragma: no-cache");
                    header("Expires: 0");
                    break;
            }
        }
        echo $content;
        exit;
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/469392.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

NSS [SWPUCTF 2022 新生赛]Power!

NSS [SWPUCTF 2022 新生赛]Power! 开题。 随便传一个111,后端进行了一个文件包含操作。 输入index.php,回显了一个不可显示图片。 有点小蒙蔽的,一般这种情况就源码,抓包,扫描。源码里面果然有货。 base解码后是index…

鸿蒙开发入门教程—瀑布流的实战案例

给大家分享一下瀑布流的实战案例,和官方文档略有不同,本文数据直接从api接口获取,更接近实战。需要注意的是,要实现瀑布流,接口最好将图片尺寸一起返回。 本文效果图: 首先要实现IDataSource接口的对象&am…

golang面试题总结

零、go与其他语言 0、什么是面向对象 在了解 Go 语言是不是面向对象(简称:OOP) 之前,我们必须先知道 OOP 是啥,得先给他 “下定义” 根据 Wikipedia 的定义,我们梳理出 OOP 的几个基本认知: …

Qt 实现 Asterix 报文解析库

【写在前面】 最近工作中需要解析 Cat 21 和 Cat 62 的 ADS-B 数据 ( 自己的工作包含航空领域 )。 然后,因为整个 Asterix 协议类别非常之多,每个类别的版本也多,纯手工实现每个版本解析根本不现实 ( 然鹅公司之前的解析库就是这么做的且做的…

VMware 与 SmartX 分布式存储缓存机制浅析与性能对比

作者:深入细节的 SmartX 一线技术团队 近日,VMware 发布了 vSAN 8,对存储架构进行了重大更新。其中最主要的变化,即引入了新的 Express Storage Architecture(ESA)架构:用“存储池”替代了原存…

使用Kalibr標定vins參數

這裏使用的是realsense D435,使用其灰階雙目的部分(把中間红外点阵投影仪遮住應該可以取得更好的效果),廠商有給相機的標定,但由於Kalibr裏可以直接標定相機和imu的相對位置,是vins需要的參數,比…

MySQL数据库概念及安装

一、数据库的基本概率 1.1 数据 记录每个人的信息 或者记录数据 1.2 表 存放信息的集合 或者存放行和列的信息 1.3 数据库 表的集合 二、数据库管理系统(DBMS) 2.1 DBMS定义 (DBMS)是一种软件,用于创建和管理…

【开发环境】Ubuntu 18.04 搭建 QT编译环境详细步骤 【亲测有效】

目录 1 查看Ubuntu系统中Qt版本 2 下载Ubuntu系统Qt版本安装包 3 Qt安装 3.1 Qt 安装步骤 3.2 安装qt发现Ubuntu空间不足,怎么去扩容呢? 3.2.1 硬盘操作步骤(需要关闭虚拟机进行操作) 3.2.2 Ubuntu命令操作:安装…

Python 实现1~100之间的偶数求和

result0 for i in range(101):if i%20:result result i print(result) 或者 result0 for i in range(2,101,2):result result i print(result)

海外代理IP在跨境电商中的五大应用场景

在我国跨境电商的发展中,海外代理IP的应用日益广泛,它不仅帮助商家成功打入国际市场,还为他们在多变的全球电商竞争中保持优势。下面是海外代理IP在跨境电商中五个关键的应用场景。 1、精准的市场分析 了解目标市场的消费者行为、产品趋势以…

数据库系统概论-练手题集合【期末复习|考研复习】

前言 总结整理不易,希望大家点赞收藏。 给大家整理了一下数据库系统概论中的练手题,以供大家期末复习和考研复习的时候使用。 数据库系统概论系列文章传送门: 第一章 绪论 第二/三章 关系数据库和标准语言SQL 第四/五章 数据库安全性和完整性…

Nodejs 第五十九章(文件流下载)

文件流下载是一种通过将文件内容以流的形式发送给客户端,实现文件下载的方法。它适用于处理大型文件或需要实时生成文件内容的情况。 安装依赖 npm install express #启动服务 提供接口 npm install cors #解决跨域nodejs 完整版代码 核心知识响应头 Content-Ty…

考研失败, 学点Java打小工_Day3_卫语句_循环

1 编码规范——卫语句 表达异常分支时&#xff0c;少用if-else方式。   比如成绩判断中对于非法输入的处理&#xff1a; /*>90 <100 优秀>80 <90 良好>70 <80 一般>60 <70 及格<60 不及格*/Testpu…

C++作业day6

编程1&#xff1a; 封装一个动物的基类&#xff0c;类中有私有成员&#xff1a;姓名&#xff0c;颜色&#xff0c;指针成员年纪 再封装一个狗这样类&#xff0c;共有继承于动物类&#xff0c;自己拓展的私有成员有&#xff1a;指针成员&#xff1a;腿的个数&#xff08;整型 …

JVM常用垃圾收集器

JVM 4.1 哪些对象可以作为GC ROOT? 虚拟机栈&#xff08;栈帧中的局部变量表&#xff09;中引用的对象本地方法栈中引用的对象方法区静态变量引用的对象方法区常量引用的对象被同步锁持有的对象JNI&#xff08;Java Native Interface&#xff09;引用的对象 4.2 常用垃圾收集…

【C语言进阶篇】自定义类型:结构体(上)

目录 1. 结构体类型的声明 ​编辑 1.1 结构体的创建和初始化 1.2 结构体的特殊声明 1.3 结构体的自引用 2. 结构体内存对齐 2.1 对齐规则 2.2 为什么存在内存对齐 2.3 修改默认对齐数 在我们描述简单对象的时候&#xff0c;使用已有的类型就足够了&#xff0c;比如: 但是当我们…

竞争优势:大型语言模型 (LLM) 如何重新定义业务策略

人工智能在内容创作中的突破 在当今快节奏的商业环境中&#xff0c;像 GPT-4 这样的大型语言模型 (LLM) 不再只是一种技术新颖性&#xff1b; 它们已成为重新定义跨行业业务战略的基石。 从增强客户服务到推动创新&#xff0c;法学硕士提供了企业不容忽视的竞争优势。 1. 加强…

量子计算+HPC!ORNL与Riverlane、Rigetti合作研发

内容来源&#xff1a;量子前哨&#xff08;ID&#xff1a;Qforepost&#xff09; 编辑丨慕一 编译/排版丨沛贤 1000字丨8分钟阅读 近日&#xff0c;英国量子计算初创公司Riverlane和美国量子计算公司Rigetti Computing宣布将参与由美国能源部橡树岭国家实验室&#xff08;OR…

【工具】vscode终端打不开

问题 1The terminal process failed to launch: A native exception occurred during launch (forkpty(3) failed.). 参考方案 下面参考链接是针对windows系统上vscode 出现的相同问题的解答 参考链接&#xff1a;https://blog.csdn.net/weixin_40921421/article/details/122…

Linux(openEuler)部署SpringBoot前后端分离项目(Nginx负载均衡)

假如数据库在本地&#xff0c;没有放在Linux中 1.先把数据库中root的主机改成% 2.项目中的数据库链接配置换成本机ip 3.打包 4.把打包好的jar包放到Linux中 一般把jar包放到opt下 5.把前端部分拷贝到Linux的nginx中 5.1在package.json中修改build的值为图中这样 5.2同时由于在…