解决ThinkPHP里无法输出图片问题(关于设置响应头)

发布时间 - 2021-03-24 00:00:00    点击率:

下面由thinkphp教程栏目给大家介绍thinkphp里无法输出图片,设置响应头方法,希望对需要的朋友有所帮助!

今天写了一个PHP生成图片,想用浏览器查看,但是每次打开都是一串乱码,看样子是图片源二进制数据,然后查看了下响应头是text/html,那我明明设置了image/jpeg

header("Content-type", "image/jpeg");

这说明TP默认设置了text/html,查了官方文档,啥也没说,去网上查,才知道TP有个Response类,默认所有控制器输出text/html,官方文档啥也没说,只好自己去翻Response这个类了

ThinkPHP6\vendor\topthink\framework\src\think\Response.php

基类Response被这几个类继承,我试了下File类,但是这个File是输出文件,浏览器直接下载了

$file = new File('123.jpg');
$response = $file->mimeType('image/jpeg');

throw new HttpResponseException($response);

在看看基类Response

 /**
     * 创建Response对象
     * @access public
     * @param  mixed  $data 输出数据
     * @param  string $type 输出类型
     * @param  int    $code 状态码
     * @return Response
     */
    public static function create($data = '', string $type = 'html', int $code = 200): Response
    {
        $class = false !== strpos($type, '\\') ? $type : '\\think\\response\\' . ucfirst(strtolower($type));

        return Container::getInstance()->invokeClass($class, [$data, $code]);
    }

这里是自动找response目录下的响应类,但我只想设置一个响应头来显示我的图片,文档翻遍了没找到方法,然后看了看目录下的Html类,那我们可以自己写一个自定义类来输出自己想要的响应格式

/**
 * Html Response
 */
class Html extends Response
{
    /**
     * 输出type
     * @var string
     */
    protected $contentType = 'text/html';

    public function __construct(Cookie $cookie, $data = '', int $code = 200)
    {
        $this->init($data, $code);
        $this->cookie = $cookie;
    }
}

于是我在response目录写了一个Jpeg类

/**
 * Html Response
 */
class Jpeg extends Response
{
    /**
     * 输出type
     * @var string
     */
    protected $contentType = 'image/jpeg';

    public function __construct(Cookie $cookie, $data = '', int $code = 200)
    {
        $this->init($data, $code);
        $this->cookie = $cookie;
    }
}

可以输出图片了

$response = Response::create('', 'Jpeg');
$image->blob('JPEG');
throw new HttpResponseException($response);

也许有办法不用这么麻烦,但是TP官方文档啥也没有写,一下子也找不到其他方法,导致我的header()函数都没用了,这里引用ThinkPHP论坛网友的一句话

框架的定义就是在于更快速、便捷地开发应用如果我使用了某款框架还是需要自己去注意条条款款,然后定义或修正许多形式上的规范,那还用框架干嘛呢本末倒置,鸡蛋里面挑骨头

相关推荐:最新的10个thinkphp视频教程


# thinkphp  # php  # html  # 继承  # 文档  # 写了  # 没说  # 都是  # 我在  # 看了  # 有个  # 目录下  # 本末倒置  # 找不到 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 详解Android中Activity的四大启动模式实验简述  Win11怎么设置默认图片查看器_Windows11照片应用关联设置  Bootstrap整体框架之CSS12栅格系统  如何快速搭建高效WAP手机网站吸引移动用户?  深圳网站制作平台,深圳市做网站好的公司有哪些?  Laravel如何为API生成Swagger或OpenAPI文档  齐河建站公司:营销型网站建设与SEO优化双核驱动策略  Zeus浏览器网页版官网入口 宙斯浏览器官网在线通道  Laravel如何实现一对一模型关联?(Eloquent示例)  香港服务器建站指南:免备案优势与SEO优化技巧全解析  UC浏览器如何切换小说阅读源_UC浏览器阅读源切换【方法】  Laravel如何实现图片防盗链功能_Laravel中间件验证Referer来源请求【方案】  利用vue写todolist单页应用  如何做网站制作流程,*游戏网站怎么搭建?  Java Adapter 适配器模式(类适配器,对象适配器)优缺点对比  网站建设保证美观性,需要考虑的几点问题!  奇安信“盘古石”团队突破 iOS 26.1 提权  Laravel项目结构怎么组织_大型Laravel应用的最佳目录结构实践  如何获取免费开源的自助建站系统源码?  Win11怎么更改系统语言为中文_Windows11安装语言包并设为显示语言  制作电商网页,电商供应链怎么做?  Laravel怎么实现观察者模式Observer_Laravel模型事件监听与解耦开发【指南】  网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?  为什么php本地部署后css不生效_静态资源加载失败修复技巧【技巧】  Laravel怎么设置路由分组Prefix_Laravel多级路由嵌套与命名空间隔离【步骤】  头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?  安克发布新款氮化镓充电宝:体积缩小 30%,支持 200W 输出  Python3.6正式版新特性预览  如何用wdcp快速搭建高效网站?  JavaScript中如何操作剪贴板_ClipboardAPI怎么用  香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南  如何在阿里云ECS服务器部署织梦CMS网站?  Laravel Sail是什么_基于Docker的Laravel本地开发环境Sail入门  LinuxShell函数封装方法_脚本复用设计思路【教程】  制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?  Python进程池调度策略_任务分发说明【指导】  太平洋网站制作公司,网络用语太平洋是什么意思?  iOS中将个别页面强制横屏其他页面竖屏  深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?  如何在IIS中新建站点并配置端口与物理路径?  如何撰写建站申请书?关键要点有哪些?  Python面向对象测试方法_mock解析【教程】  Laravel storage目录权限问题_Laravel文件写入权限设置  电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?  高性能网站服务器部署指南:稳定运行与安全配置优化方案  进行网站优化必须要坚持的四大原则  如何用AI帮你把自己的生活经历写成一个有趣的故事?  如何快速建站并高效导出源代码?  Laravel如何使用缓存系统提升性能_Laravel缓存驱动和应用优化方案  矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?