文档章节

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

猿界一郎
 猿界一郎
发布于 2017/04/25 11:14
字数 392
阅读 27
收藏 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
博文 6
码字总数 3475
作品 0
无锡
程序员
ThinkPHP 查询数据 select(findAll) 方法

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

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

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

仃虽楠
05/09
0
0
新手指导Thinkphp开发指南

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

汤圆
2012/12/25
0
1
thinkphp+ajax无刷新分页并加载显示图片

最近自己用thinkphp和bootstrap做一个小站点,在用到ajax与后台数据库交互实现无刷新分页时,因为我需要返回的数据是html代码,里面包含要显示出图片,然而返回数据到静态页面时,却发现返回...

glowry
2014/03/17
0
0
thinkphp_图片上传裁剪功能_已迁移

准备材料 THINKPHP jQuery表单插件 cropper 裁剪插件 思路: 利用THINKPHP上传文件类与图片裁剪类,前台想办法组合参数给后台 那怎么样可以异步提交文件呢 关键就是 jquery表单插件了 后台准...

辣条拌鱼翅
2015/09/25
0
1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

深夜胡思乱想

魔兽世界 最近魔兽世界出了新版本, 周末两天升到了满级,比之前的版本体验好很多,做任务不用抢怪了,不用组队打怪也是共享拾取的。技能简化了很多,哪个亮按哪个。 运维 服务器 产品 之间的...

Firxiao
8分钟前
0
0
MySQL 8 在 Windows 下安装及使用

MySQL 8 带来了全新的体验,比如支持 NoSQL、JSON 等,拥有比 MySQL 5.7 两倍以上的性能提升。本文讲解如何在 Windows 下安装 MySQL 8,以及基本的 MySQL 用法。 下载 下载地址 https://dev....

waylau
42分钟前
0
0
微信第三方平台 access_token is invalid or not latest

微信第三方开发平台code换session_key说的特别容易,但是我一使用就带来无穷无尽的烦恼,搞了一整天也无济于事. 现在记录一下解决问题的过程,方便后来人参考. 我遇到的这个问题搜索了整个网络也...

自由的开源
今天
0
0
openJDK之sun.misc.Unsafe类CAS底层实现

注:这篇文章参考了https://www.cnblogs.com/snowater/p/8303698.html 1.sun.misc.Unsafe中CAS方法 在sun.misc.Unsafe中CAS方法如下: compareAndSwapObject(java.lang.Object arg0, long a......

汉斯-冯-拉特
今天
2
0
设计模式之五 责任链模式(Chain of Responsibility)

一. 场景 相信我们都有过这样的经历; 我们去职能部门办理一个事情,先去了A部门,到了地方被告知这件事情由B部门处理; 当我们到了B部门的时候,又被告知这件事情已经移交给了C部门处理; ...

JackieRiver
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部