ThinkPHP读取excel中的图片并以blob类型存入mysql,以及从mysql读取二进制流在页面显示图片
ThinkPHP读取excel中的图片并以blob类型存入mysql,以及从mysql读取二进制流在页面显示图片
猿界一郎 发表于10个月前
ThinkPHP读取excel中的图片并以blob类型存入mysql,以及从mysql读取二进制流在页面显示图片
  • 发表于 10个月前
  • 阅读 24
  • 收藏 0
  • 点赞 0
  • 评论 0

新睿云服务器60天免费使用,快来体验!>>>   

    最近领导提了个需求,导入excel,这很简单,但excel中有图片,这就有点难度了,毕竟非前端专业人猿。第一个难点就是获取图片流,在这里先吐槽一下百度,这也是我写博客记录以免今后遇到同样需求而作的笔记,百度是真的杂,各种回答就是每一个靠谱的,最后翻墙在谷歌上分分钟找到了答案。

代码如下:

foreach ($objPHPExcel->getActiveSheet()->getDrawingCollection() as $drawing) 
			{	
			    if ($drawing instanceof PHPExcel_Worksheet_MemoryDrawing) 
			    { 
			        ob_start();	
			        call_user_func(	
			            $drawing->getRenderingFunction(),	$drawing->getImageResource()	
			        ); 
			        $imageContents = ob_get_contents();	
			        ob_end_clean();	
			        $extension = 'png';	
			    } else {	
			        $zipReader = fopen($drawing->getPath(),'r');	
			        $imageContents = '';	
			        while (!feof($zipReader)) 
			        {	
			            $imageContents .= fread($zipReader,1024);	
			        }	
			        fclose($zipReader);	
			        $extension = $drawing->getExtension();	
			    }
			    $xy = $drawing->getCoordinates();
			    $myFileName = './Public/pics/'.$xy.'.'.$extension;
			    $cell = $sheet->getCell($drawing->getCoordinates());
			    $cell->setValue($imageContents);
			    file_put_contents($myFileName,$imageContents);
}

我这个比较简单,图片在固定的两列,生成图片,获取图片二进制流:

$source_no_file_name = './Public/pics/E'.$i.'.BMP';
$source_card_no=addslashes(fread(fopen($source_no_file_name,"r"),filesize($source_no_file_name)));
//addslashes是对流字符串进行转义,不然插入mysql会报错				

至此就可以成功入库了,mysql查看blob,点击备注->图片。

接下来是从mysql读取blob及在页面上显示(请教了公司的前端大神,毕竟我是菜逼),

对二进制流的字段进行base64编码:

foreach ($cardlist as $k=> $val){
		    $cardlist[$k]['source_card_no'] = base64_encode($val['source_card_no']);
		    $cardlist[$k]['source_card_pwd'] = base64_encode($val['source_card_pwd']);
		}

html显示代码如下:

<img src="data:image/png;base64,{$card.source_card_no}//此处为base64_encode后的字符串"

注:这种方式效率比较低

 

  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 2
博文 2
码字总数 2142
×
猿界一郎
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: