文档章节

ThinkPHP读取excel中的图片并以blob类型存入mysql,以及从mysql读取二进制流在页面显示图片

猿界一郎
 猿界一郎
发布于 2017/04/25 11:14
字数 392
阅读 38
收藏 0

    最近领导提了个需求,导入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
博文 7
码字总数 4940
作品 0
无锡
程序员
私信 提问
ThinkPHP 查询数据 select(findAll) 方法

ThinkPHP 查询数据 ThinkPHP 查询数据主要提供以下几类查询: select:普通查询,同 findAll() 方法 find:取得符合查询条件的一条记录 getBy动态查询:根据某个字段取得符合查询条件的一条记...

WangEven
2012/05/10
0
0
XAMPP和ThinkPHP 5.0的安装和验证

工欲善其事必先利其器,对搞开发的攻城狮来讲,其器就是各种开发工具和开发环境,而这些在刚入门的时候由于不熟悉,往往是花费时间和精力最多的地方。记得我上大学那会,自学PHP光安装Apach...

仃虽楠
2018/05/09
0
0
ThinkPhp缓存原理及使用详解

做这个项目时,服务端最开始是使用原生php写的,在查询数据库时,没有做任何缓存,后来做到商城,采用thinkphp框架,页面加载突然提速了很多,专门和做php的朋友交流了一下,了解到thinkphp内...

一只好奇的茂
2017/05/19
0
0
7个使用和不使用ThinkPHP的理由

花了几个星期时间想完成下面两篇文章(7个使用ThinkPHP的理由、7个不使用ThinkPHP的理由),但是绞尽脑汁还是没能完成,下周打算给公司员工做ThinkPHP的培训,于是上来问一下大家有没有什么好...

黄冠能
2015/11/17
5.8K
16
新手指导Thinkphp开发指南

小编于昨日参加朋友婚礼,浑身喜气洋洋。今天给用户带来的是关于thinkphp开发指南的纯技术性的文档,本文档目的很简单: 1、 帮助开发人员掌握thinkphp入门 2、 快速利用thinkphp进行项目开发...

汤圆
2012/12/25
0
1

没有更多内容

加载失败,请刷新页面

加载更多

如何利用 Data too long for column 进行一些简单的攻击

1: 前提条件, 后台没有校验长度和频率校验,也没有CSRF校验,直接往数据库插入数据,此时很容易触发Data too long for column错误(一般抛出异常都挺浪费资源的,耗时,耗内存,耗cpu),一旦...

专业写BUG的程序员
8分钟前
0
0
RMAN命令详解

一、list命令 1. List 当前RMAN所备份的数据库: 1.1. list backup summary; --概述可用的备份 list incarnation;--汇总查询 --如果备份文件多的话多用这两个list命令可以对备份文件有个总体...

突突突酱
12分钟前
0
0
简单聊聊Linux学习经历

学习,是我们一生中都规避不了的一个话题,人的一生中都是在不断的学习,无论是功成名就的人士,还是一无是处的小混混,始终都处在一个不断学习的环境中,只是学习的内容千差万别,有的人是为...

问题终结者
19分钟前
0
0
Mysql高级 (2)——sql性能调优

sql 性能下降的原因

小小小施爷
23分钟前
0
0
MaxCompute用户初体验

作为一名初次使用MaxCompute的用户,我体会颇深。MaxCompute 开箱即用,拥有集成化的操作界面,你不必关心集群搭建、配置和运维工作。仅需简单的点击鼠标,几步操作,就可以在MaxCompute中上...

阿里云官方博客
25分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部