php 页面中下载文件|图片

news2025/5/21 10:29:56

一、需求

页面中点击下载图片

二、实现

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;
    }

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

力扣大厂热门面试算法题 43-45

43. 字符串相乘,44. 通配符匹配,45. 跳跃游戏 II,每题做详细思路梳理,配套Python&Java双语代码, 2024.03.18 可通过leetcode所有测试用例。 目录 43. 字符串相乘 解题思路 完整代码 Python Java 44. 通配符…

【JAVA快速编写UI】 Java 编写一个编码转换和加解密工具,可以创建一个简单的 GUI 应用程序(例子)

EncodingDecodingTool/ ├── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── rockmelodies/ │ │ │ └── encodingdecodingtool/ │ │ │ ├── MainApp.java │ │ │ …

MongoDB启动报错

spring boot 引入MongoDB启动报错 java.lang.IllegalStateException: Failed to introspect Class [io.micrometer.core.instrument.binder.mongodb.DefaultMongoConnectionPoolTagsProvider] from ClassLoader [sun.misc.Launcher$AppClassLoader18b4aac2] at org.springfra…

初识STL(标准模板库)

目录 ​编辑 什么是STL STL的版本 STL的六大组件 如何学习STL STL的优势 STL的缺陷 ⭐什么是STL STL(standard template libaray- 标准模板库 ) : 是 C 标准库的重要组成部分 ,不仅是一个可复用的组件库,而且 是一个包罗数据结构与算法…

C语言笔记:函数与程序结构

目录 ACM金牌带你零基础直达C语言精通-课程资料 一.作用域的基本概念 二.函数 1. 函数的定义和使用 2.为什么一定要有函数结构 3.形参与实参 4.函数的声明和定义 5.递归函数 此代码中递归函数执行流程: 练习:求斐波那契数列第n项的值: 欧几里…

洛谷_P1104 生日_python写法

P1104 生日 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 知识点: 还是自定义规则的排序,然后这里还有python中如何在一行中输入多种类型的数据。 n int(input()) data [] num 1 for i in range(n):img list(input().split())s img[0]y int(img…

【unity与android的交互】移动游戏发布更安心!Unity安卓平台打包相关的常见参数全详解

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:Uni…

深度学习500问——Chapter03:深度学习基础(3)

文章目录 3.5 Batch Size 3.5.1 为什么需要 Batch size 3.5.2 Batch Size 值的选择 3.5.3 在合理范围内,增大Batch Size有何好处 3.5.4 盲目增大 Batch Size有何坏处 3.5.5 调节Batch Size对训练效果影响到底如何 3.6 归一化 3.6.1 归一化含义 3.6.2 为什么…

大模型知识库

一种利用 langchain 思想实现的基于本地知识库的问答应用,目标期望建立一套对中文场景与开源模型支持友好、可离线运行的知识库问答解决方案。 1. 下载Langchain-chatchat git clone https://github.com/chatchat-space/Langchain-Chatchat/ 2. 下载大模型和embe…

打开Railway神奇大门:Railway免费注册部署全面教程

🧙‍♂️ 诸位好,吾乃斜杠君,编程界之翘楚,代码之大师。算法如流水,逻辑如棋局。 📜 吾之笔记,内含诸般技术之秘诀。吾欲以此笔记,传授编程之道,助汝解技术难题。 &#…

React——开发者工具

浏览器插件:谷歌浏览器插件react-devtools 方式1:chrome应用商店添加 方式2:下载安装包放在浏览器上

Redis缓存穿透的几种解决方案

目录 缓存穿透原理: 缓存穿透一般有几种解决方案: 1.缓存空值 2.使用锁 3.布隆过滤器 优缺点 布隆过滤器误判理解 布隆过滤器的简单使用流程 4.组合方案 那么当我们高并发的访问短链接或者人为的去穿透的时候呢? 最近做项目遇到了缓…

SpringBoot自动配置

EnableAutoConfiguration源码解析SpringBoot常用条件注解源码解析SpringBoot之Mybatis自动配置源码解析SpringBoot之AOP自动配置源码解析SpringBoot Jar包启动过程源码解析 SpringBoot2.6.6源码地址:SpringBoot-2.6.6: SpringBoot2.6.6 注解详解 SpringBootConfig…

【技术栈】Spring Cache 简化 Redis 缓存使用

​ SueWakeup 个人主页:SueWakeup 系列专栏:学习技术栈 个性签名:保留赤子之心也许是种幸运吧 ​ 本文封面由 凯楠📸 友情提供 目录 本栏传送门 1. Spring Cache 介绍 2. Spring Cache 常用注解 注:手机端浏览本文章…

java入门 -输入和输出

输入输出 开发中大量会使用输入和输出,今天来总结一下Java语法阶段常使用的输入和输出。 输出 System.out 控制台输出信息。 不换行显示一行: System.out.print( ); System.out.print("hello "); System.out.print("java!");运行结…

如何强健“伙伴+华为”体系?华为用六大升级给出答案

聚拢企业内部资源,可以成事;而聚拢企业内外资源,则可成势。 华为如何在NA、商业和分销三大赛道聚拢伙伴之力成势?伙伴又如何与华为一起顺势而为,获得发展和收益?这是在一年一度的“华为中国合作伙伴大会”…

MyBatis3源码深度解析(十六)SqlSession的创建与执行(三)Mapper方法的调用过程

文章目录 前言5.9 Mapper方法的调用过程5.10 小结 前言 上一节【MyBatis3源码深度解析(十五)SqlSession的创建与执行(二)Mapper接口和XML配置文件的注册与获取】已经知道,调用SqlSession对象的getMapper(Class)方法,传入指定的Mapper接口对应的Class对象…

BUU [MRCTF2020]套娃

BUU [MRCTF2020]套娃 开题&#xff0c;啥也没有。 查看网页源代码发现后端源代码&#xff1a; <?php //1st $query $_SERVER[QUERY_STRING];if( substr_count($query, _) ! 0 || substr_count($query, %5f) ! 0 ){die(Y0u are So cutE!); }if($_GET[b_u_p_t] ! 23333 &am…

Vue核心知识点 -Vue2响应式系统是基于什么实现的、以及会产生什么问题和解决方案

一、概念 在Vue 2中&#xff0c;响应式系统是基于Object.defineProperty实现的。它通过劫持对象的属性来实现数据的响应式更新。 当你将一个对象传递给Vue实例的data选项时&#xff0c;Vue会遍历对象的每个属性&#xff0c;并使用Object.defineProperty方法将其转换为getter和s…

项目总结报告-word

2 项目工作成果 2.1 交付给用户的产品 2.2 交付给研发中心的产品 2.2.1 代码部分 2.2.2 文档部分 2.3 需求完成情况与功能及性能符合性统计 2.3.1 需求完成情况统计 2.3.2 功能符合性分析 2.3.3 性能符合性分析 3 项目工作分析 3.1 项目计划与进度实施分析 3.1.1 开发进度 3.1.…