网页网站您现在的位置是:首页 > 博客日志 > 网页网站

ueditor 无法远程抓取微信公众号文章图片的Bug解决方法

<a href='mailto:'>微wx笑</a>的头像微wx笑2020-03-31 21:20:16网页网站人已围观关键字: ueditor  微信公众号  

转载文章的时候,我们希望通过服务器把图片抓取下来存到本地服务器上,以防止原文及图片删除后,转载的文章无法显示图片。但是今天发现在抓取图片的时候失败了,原因是图片的 Conte

转载文章的时候,我们希望通过服务器把图片抓取下来存到本地服务器上,以防止原文及图片删除后,转载的文章无法显示图片。但是今天发现在抓取图片的时候失败了,原因是图片的 Content-Type 是application/octet-stream,导致验证失败,所以没有抓取成功。VaF编程技术_踩坑日志_进阶指南_无知人生

解决方法:VaF编程技术_踩坑日志_进阶指南_无知人生

1、修改 Uploader.class.php 文件中的验证部分,增加application/octet-stream 类型VaF编程技术_踩坑日志_进阶指南_无知人生

        //格式验证(扩展名验证和Content-Type验证)
        if (!isset($heads['Content-Type']) || (!stristr($heads['Content-Type'], "image") && !stristr($heads['Content-Type'], "application/octet-stream"))) {
            $this->stateInfo = $this->getStateInfo("ERROR_HTTP_CONTENTTYPE").$heads['Content-Type'];
            return;
        }else{
            if (count($this->config['allowFiles']) > 0){
                $fileType = strtolower(strrchr($imgUrl, '.'));
                if (strpos($fileType, "?")){
                    $fileType = strstr($fileType, "?", true);
                }
                if (!in_array($fileType, $this->config['allowFiles'])){
                    //$this->stateInfo = $this->getStateInfo("ERROR_HTTP_ALLOWFILES");
                    //return;
                }
            }
        }

2、处理扩展名的问题
VaF编程技术_踩坑日志_进阶指南_无知人生

由于 Content-Type 后面的部分是 octet-stream,不是真正的扩展名,所以给一个默认的扩展名 png,虽然可能不一定完全正确,但现在的浏览器基本都能正确显示。VaF编程技术_踩坑日志_进阶指南_无知人生

        $this->oriName = $m ? $m[1]:"";
        if (!strpos($this->oriName, ".")){
          if (strpos($heads['Content-Type'], '/')){
            $extn = substr($heads['Content-Type'], strpos($heads['Content-Type'], '/')+1);
            if (stristr($extn, "octet-stream")){
                $this->oriName .= ".png";
            }else{
            $this->oriName .= ".".$extn;
            }
          }else{
            $this->oriName .= ".png";
          }
        }


VaF编程技术_踩坑日志_进阶指南_无知人生

本文由 微wx笑 创作,采用 CC BY-NC 4.0 许可协议。 非商业性使用可自由转载、引用、甚至修改,但需署名作者且注明出处。

很赞哦! () 有话说 ()