采集文章图片本地化,绝对可用。

本文介绍了一种将图片从本地上传至阿里云OSS的方法,并在上传前后进行图片路径的替换,确保图片能在网页中正确显示。通过正则表达式匹配图片地址,根据图片类型保存至本地目录,再上传至OSS并更新HTML中的图片链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本案例是存储到oss上,上传oss之前会先保存到本地目录. 最终返回路径是oss图片完整路径。 如果不需要上传oss,去掉即可。

 public function replaceimg($xstr){

        //保存路径
        $d = date('Y-m-d', time());
        $dirslsitss = TP::root_path().'/Uploads/Picture'.'/'.$d;//本地存储目录
        $savePath   =   '/Uploads/Headline'.'/'.$d; //入库路径
        if(!is_dir($dirslsitss)) {
            @mkdir($dirslsitss, 0777);
        }
        //匹配图片的src
        preg_match_all('#<img.*?src="([^"]*)"[^>]*>#i', $xstr, $match);
        foreach($match[1] as $imgurl){
            if(is_int(strpos($imgurl, 'http'))){
                $arcurl = $imgurl;
            } else {
                $arcurl = 'http://'.ltrim($imgurl,'\//'); //17173,qqGame,需要拼接网址,特殊处理
            }
            $file   =   @file_get_contents($arcurl);
            $imgAttr = get_headers($arcurl,true);
            switch($imgAttr['Content-Type']){
                case 'image/png' :
                    $ext = 'png';
                    break;
                case 'image/jpeg' :
                    $ext = 'jpg';
                    break;
                case 'image/gif' :
                    $ext = 'gif';
                    break;
                default:
                    $ext = 'jpg';
            }
            if($arcurl) {
                //保存图片到服务器
                $fileimgname = time().rand(1000,9999).'.'.$ext;
                $filecachs=$dirslsitss.'/'.$fileimgname;
                $oss_file_path ="icon/". $fileimgname;
                $fanhuistr = file_put_contents( $filecachs, $file );
                $saveimgfile = $savePath."/".$fileimgname;
                $ossClient = new OssClient($this->accessKeyId, $this->accessKeySecret, $this->endpoint);//上传到oss中
                $ossClient->uploadFile($this->bucket, $oss_file_path, $filecachs);
                $to = "http://" . $this->bucket . "." . $this->endpoint . "/icon/" .$fileimgname;
                $xstr=str_replace($imgurl,$to,$xstr);
            }else{
                $xstr = false;
            }
        }

        return $xstr;
 }
复制代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值