文档章节

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

猿界一郎
 猿界一郎
发布于 2017/04/25 11:14
字数 392
阅读 29
收藏 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
码字总数 4478
作品 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缓存原理及使用详解

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

一只好奇的茂
2017/05/19
0
0
新手指导Thinkphp开发指南

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

汤圆
2012/12/25
0
1
thinkphp_图片上传裁剪功能_已迁移

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

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

没有更多内容

加载失败,请刷新页面

加载更多

oracle 安装 PL/SQL Developer连接64位Oracle免安装配置

PL/SQL Developer连接64位Oracle 在64位系统上安装64位的Oracle数据库,但是没有对应的64位PL/SQL Developer,此时就不能使用PL/SQL Developer来进行直接连接的,所以要想实现连接还得需要其...

PeakFang-BOK
16分钟前
2
0
裁员寒冬袭来,30岁还在CRUD的Java程序员,拿什么安身立命?

就在近日,智联招聘公布的数据更是侧面印证了很多公司“瘦身”的事实:“2018年第二季度,小微企业用人需求较第一季度平均下降26.6%”。 裁员大潮正滚滚向前,席卷各行各业! 你做好失业的准...

Java填坑之路
18分钟前
3
0
第一章:什么是SpringCloud

第一章:什么是SpringCloud 何为微服务 在了解 SpringCloud之前,我们先来大致了解下 微服务这个概念吧。 传统单体架构 单体架构在小微企业比较常见,典型代表就是一个应用、一个数据库、一个...

DemonsI
24分钟前
5
0
环境搭建之八-- node.js和npm

1.node.js官网下载64位二进制压缩包 node-v8.12.0-linux-x64.tar.xz 2.解压文件 2.1 xz格式文件为 tar格式 xz -d node-v8.12.0-linux-x64.tar.xz 此时文件已经转变为 node-v8.12.0-linux-x64...

imbiao
28分钟前
1
0
JVM调优浅谈

1.数据类型 java虚拟机中,数据类型可以分为两类:基本类型和引用类型。 基本类型的变量保存原始值,即:它代表的值就是数值本身,而引用类型的变量保存引用值。 “引用值”代表了某个对象的...

xtof
32分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部