JSP页面实现图片、PDF字节流的显示,Word、Excel、Zip字节流的下载功能的实现

基于Apache POI的poi-tl模板引擎:Java动态生成Word文档的声明式解决方案 在Java企业级应用开发中,动态生成格式规范的Word文档(如合同、报告、通知单)是一项常见需求。传统方式使用Apache POI等库进行硬编码操作,存在代码臃肿、样式与逻辑耦合度高、维护成本大等问题。模板引擎技术通过将文档样式设计与数据逻辑分离,提供了更优雅的解决方案。其核心原理是预先在Word中设计包含占位符的模板文件,程序运行时将数据模型与模板合并渲染,自动生成最终文档。这种声明式方法极大提升了开发效率和系统可维护性,尤其适用于需要频繁调整模板样式的场景。poi-tl作为基于Apache POI构建的 阅读详情

项目中需要把存储在数据库Blob字段中字节流进行以下相关的操作:

1.图片文件直接在页面中显示;

2.Doc,PDF等文档提示用户下载。

这个需求需要解决2个问题,第一个问题,从数据库中读取Blob字段;第二个问题,根据文件的类型,图片文件直接显示,其他文件提供下载功能。

在这里读取BLob字段的数据不是什么难点,我们知道用Blob字段是保存的二进制流文件,用Byte[]来保存即可。代码如下:

//获得数据库连接   
     Connection con = ConnectionFactory.getConnection();   
     con.setAutoCommit(false);   
     Statement st = con.createStatement();      
     ResultSet rs = st.executeQuery("select BLOBATTR from TESTBLOB where ID=1");   
     if (rs.next())   
     {   
         java.sql.Blob blob = rs.getBlob("BLOBATTR");   
         InputStream inStream = blob.getBinaryStream();   
         //data是读出并需要返回的数据,类型是byte[]   
         data = new byte[input.available()];   
         inStream.read(data);   
         inStream.close();   
     }   
     inStream.close();   
     con.commit();   
     con.close(); 

对于如何按需求处理二进制流文件,我的实现方式如下:

		static {
		MIME = new Hashtable();
		MIME.put("jpeg", "image/jpeg");
		MIME.put("jpg", "image/jpeg");
		MIME.put("jfif", "image/jpeg");
		MIME.put("jfif-tbnl", "image/jpeg");
		MIME.put("jpe", "image/jpeg");
		MIME.put("jfif", "image/jpeg");
		MIME.put("tiff", "image/tiff");
		MIME.put("tif", "image/tiff");
		MIME.put("gif", "image/gif");
		MIME.put("xls", "application/x-msexcel");
		MIME.put("doc", "application/msword");
		MIME.put("ppt", "application/x-mspowerpoint");
		MIME.put("zip", "application/x-zip-compressed");
		MIME.put("pdf", "application/pdf");
	}

	/**
	 * 对字节流进行处理,图片显示,其他提供下载
	 * @param fileName 文件名称
	 * @param bytes[] 文件二进制流
	 * @param down 是否下载
	 * 
	 * @return
	 */
	public static void StreamOper(HttpServletResponse response, String fileName, byte bytes[], boolean down)
		throws IOException {
			int index = 0;
			String ext = "";
			if ((index = fileName.indexOf('.')) > 0)
				ext = fileName.substring(index + 1);
			//通过文件名的后缀判断文件的格式
			String mime = (String) MIME.get(ext);
			if (mime == null)
				mime = "application/x-msdownload";

                        response.setContentType(mime);
			//是否需要提供下载
			if (down)
				response.setHeader("Content-Disposition", "attachment; filename=" + fileName);
			OutputStream outStream = response.getOutputStream();
			outStream.write(bytes, 0, bytes.length);
			outStream.flush();
			outStream.close();
		}


在前台的JSP页面中直接调用StreamOper方法即可。图片和PDF二进制流都可以在JSP中显示,Doc,Excel等流直接提示用户下载。

<%

	FileDownloader.StreamOper(response, filename, pic, false);
	
%>

这样对于图片,直接在JSP中显示,对于其他问题提示用户下载。

最后附上一段如何读取文件转换成二进制流程代码,供大家参考:

	///读取文件字节流
	public static byte[] readerFileStream(String fileName)
			throws IOException {
		File f = new File(fileName);
		int length = (int)f.length();
		
		byte[] buff = new byte[length];
		
		BufferedInputStream bis = null;
		
	
		bis = new BufferedInputStream(new FileInputStream(fileName));
		int bytesRead;
		while(-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
		}
		
		return buff;
	}








通过文件流读取本地图片显示在JSP页面方法 立即下载

相关推荐

以GD32F103C8T6为例的核心板原理图PCB绘制学习笔记简单总结

重点在supplier part是立创商城的编号,可以搜到。

2301_80397661的博客 3261

用Jsp来实现文件下载功能的几种方式

用Jsp来实现文件下载功能的几种方式 1.最直接最简单的,方式是把文件地址直接放到html页面的一个链接中。这样做的缺点是把文件在服务器上的路径暴露了,并且还无法对文件下载进行其它的控制(如权限)。这个就不写示例了。 2.在服务器端把文件转换成输出流,写入...

diz45481的博客 292

手把手教你用Cadence仿真12bit SAR ADC:从电路图到FFT频谱分析(含Simc 18mmrf工艺文件)

本文详细介绍了使用Cadence仿真12bit SAR ADC的全流程,包括电路搭建、仿真环境配置、瞬态仿真优化及FFT频谱分析。基于Simc 18mmrf工艺文件,提供从电路图到性能验证的实战指南,特别分享工程实践中的排错技巧和优化策略,帮助工程师高效完成ADC设计验证。

weixin_30832405的博客 404

jsp web中实现文件上传下载的三种解决方案(推荐)

这里只写后端的代码,基本的思想就是,前端将文件分片,然后每次访问上传接口的时候,向后端传入参数:当前为第几块文件,和分片总数 下面直接贴代码吧,一些难懂的我大部分都加上注释了: 上传文件实体类: 看得出来,实体类中已经有很多我们需要的功能了,还有实用的属性。如MD5秒传的信息。 publicclassFileInf{ publicFileInf(){} publicStringid=""; publicStringpid=""; p...

weixin_45525177的博客 436

Vision-Language Navigation - Windows环境下编译安装Matterport3D Simulator仿真器(三)

目录1 编译 Matterport3D Simulator 源码1.1 源码下载1.2 编译 1 编译 Matterport3D Simulator 源码   在 Windows 下编译 Matterport3D Simulator 稍微有些不方便,需要对 CMakeLists.txt 进行一些修改,如果有更好的方法欢迎大家评论。 1.1 源码下载   还是直接在 Github 上搜索 Matterport3D Simulator 的 repo,下载源码。如果用 zip 方式,那么直接在下即可。如果使用

weixin_44110393的博客 4845

Nginx源码安装和基础配置

Nginx简介 nginx: 世界第二大web服务器软件,以高并发、低消耗著称,源自于俄罗斯,创建者 Igor(伊戈尔),2004年开源,最早以代理服务器的身份出现,2015成立nginx公司,2019年以6.7亿被F5 Networks公司收购。 代理服务器: 正向:squid 反向: squid:最古老的代理服务器 LVS: 优点: 1.抗负载能力强、是工作在网络4层之上仅作分发之用 2.配置性比较低,这是一个缺点也是一个优点,简单不易出错 3.工作稳定,抗负载能力很强,有完整的双机热备方案

hjyhjy0的博客 500

后端返回二进制流,前端处理二进制文件流,实现预览图片以及PDF

转成的本地预览地址赋值给Img的src即可展示图片。方法打开转成本地预览地址即可预览PDF,如下图。转成本地预览地址, 在通过。定义接口:并设置相应类型。1、首先预览PDF需要。,不能预览,会直接下载。

小得盈满! 6565

USB设备识别码VID和PID详解:如何查询和自定义你的设备ID

本文详细解析了USB设备识别码VID和PID的核心作用、查询方法及自定义配置技巧。VID(供应商识别码)和PID(产品识别码)是USB设备的唯一身份证,用于驱动匹配和功能识别。文章提供了Windows和Linux系统下的查询方法,并探讨了如何合法获取和自定义VID/PID,适合硬件开发者和DIY爱好者参考。

weixin_29168675的博客 1444

jsp 如何直接在网页中显示PDF文件

1、<embed width="800" height="600" src="test_pdf.pdf"> </embed> 通过的浏览器:Firefox 2、<object classid="clsid:CA8A9780-280D-11CF-A24D-444553540000" width="800" height="600" border="0"> <param name="SRC" value="test_pdf.pdf"> </objec

qq_14874791的博客 3万+

STM32----SPI+DMA高效读写外部Flash的配置与实战

本文详细介绍了STM32通过SPI+DMA高效读写外部Flash的配置与实战方法。针对大量数据传输场景,使用DMA技术可显著提升系统效率,释放CPU资源。文章包含完整的代码实现、常见问题调试技巧以及性能优化建议,帮助开发者快速掌握这一关键技术。

pea55的博客 1030

Unity引擎开发:复杂动作系统_动作捕捉数据的应用与整合

通过以上步骤,我们可以在Unity中有效地应用和整合动作捕捉数据,以实现更加真实和流畅的动画效果。从导入文件格式的选择,到预处理和优化,再到实时应用和调试验证,每一步都至关重要。希望本文能帮助你在Unity项目中更好地利用动作捕捉数据,提升动画质量和性能。

chenlz2007的博客 957

java怎么将图片文件转流并在jsp前端显示_web前端—面试题汇总(001-005)

每天坚持更新五道web前端开发面试题;点点关注,才会不迷路哦~~~~~001、WEB应用中如果有.class和.jar类型的文件一般分别应该放在什么位置? 答:.class文件放在WEB-INF/classes文件下,.jar文件放在WEB-INF/lib文件夹下002、元素中有一个输入框(< input type='text' name=”user...

weixin_39610724的博客 272

rk3568 rk628桥片hdmi转lvds

RK628 是瑞芯微全新推出的视频桥接芯片,支持丰富的显示接口,支持高分辨率大屏产品转换需求。基于DRM、FB的显示框架易于使用。 输入信号支持:HDMI、RGB、BT.1120,输出信号支持 HDMI、GVI、Dual LVDS、Dual MIPI、MIPI-CSI、RGB、BT.1120,最高支持4K 60fps 输入/输出转换,并且支持输入到输出 1/4~4倍的缩放。

weixin_35723192的博客 1130

jsp页面在线显示pdf文件

实现功能 需要在线预览ES搜索到的电子文档(如果不是pdf格式的文档,可以考虑先转成PDF格式) 实现思路 在jsp页面中使用 <embed :src="url" type="application/pdf" width="100%" height="100%"> 如果你的pdf文档是放在启动的项目里的src用 ...

weixin_43565319的博客 6715

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

使用输出流解决在网页(JSP)中显示文档(PDF等)问题

今天看到个贴,问关于application/pdf的问题,感觉挺有意思的,顺便自己尝试了下 下面给出具体代码 在工程的web.xml中添加mime信息(读者可自行尝试更换成其他格式,比如word) pdf application/pdf 在servl

周绍禹-whuiss 3431

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

jsp请求java返回pdf、excel与word

1,返回pdf关键代码 /** * @todo * @param * @date 2019年3月8日 * @author yanan */ @RequestMapping("/getPdf") public void getPdf(HttpServletRequest req, HttpServl...

weixin_34310127的博客 505

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

jsp网页通过流显示图片

jsp导入图片的方式 (1)第一种是将图片全部导入到项目中,然后用相对的路径的方式进行导入 &amp;lt;img src=&quot;相对的路径&quot;&amp;gt; (2)这里主要说的是第二种:如果没有将图片导入到项目中而是在项目外的某个磁盘上就要着重进行如下的方法(利用流,将图片导入到页面上) ...

weixin_40843624的博客 3343

jsp怎么从后台读取远程共享文件夹下的图片在前端显示_第136天:Web前端面试题总结(理论)...

Web前端面试题总结HTML+CSS理论知识1、讲讲输入完网址按下回车,到看到网页这个过程中发生了什么a.域名解析b. 发起TCP的3次握手c. 建立TCP连接后发起http请求d. 服务器端响应http请求,浏览器得到html代码e. 浏览器解析html代码,并请求html代码中的资源  f. 浏览器对页面进行渲染呈现给用户2、谈谈你对前端性能优化的理解a. 请求数量:合并脚本和样式表,CSS ...

weixin_39956353的博客 1464

java 实现Gzip 压缩字符及字节流输出到页面显示

java过滤器实现Gzip压缩实例源码教程。Gzip是若干种文件压缩程序的简称,我们这里来实现通过javaee中的filter实现对响应数据的压缩,高效的传到客户端,那么是怎么通过Gzip压缩实现的将数据压缩后客户端的,对步骤进行分析: 1.我们把客户端要对用户响应的数据先放在缓存中, 2.然后,通过Gzip将缓存中的数据压缩, 3.在过滤器中通过response的写方法,将数据

szl的专栏 5771

Struts2框架、以流的方式在jsp页面上展示PDF

项目背景:最近因为项目需要,做了一个与第三方对接的项目,第三方把报告以Base64加密二进制字节码推送到我们这边,直接把该值存于oracle数据库中类型为blod的字段中保存。 项目实现: 实现的思想:因为是struts2架构,需要第一次请求,加载页面,然后在加载页面中调用对应查询流数据进行输入到该页面。 1、创建action和jsp页面 因为传过的来就是二进制流,所以不需要像读文件一样, 直接上代码 2、配置struts.xml 3、jsp页面开发因为是pdf格式,需要用object

Maoiur的博客 656

在jsp上显示pdf||网页直接打开PDF 在IE中显示pdf文档的方法及参数设置

一:在jsp上显示pdf   Java代码    pageEncoding="ISO-8859-1"%>   String path = request.getContextPath();   String basePath = request.getScheme() + "://"      + request.getServerName() + ":" + requ

2443

jsp按格式导出doc文件实例详解

这篇文章主要介绍了jsp按格式导出doc文件实例详解的相关资料,xml文件用字符串表示了doc文件的表现形式,我们只需要用Java将那些要填的内容替换掉然后下载给客户就行了需要的朋友可以参考下。 jsp按格式导出doc文件实例详解 原理:doc文件其实可以保存为xml文件,该xml文件用字符串表示了doc文件的表现形式,我们只需要用Java将那些要填的内容替换掉然后下载给客户就行了。 1.首先是按...

lomo_2019的博客 419

jsp实现在线预览pdf、word、xls、ppt等文件

最近在做一个共享数字化平台,一些所涉功能知识记录一下。 、其他教程写得太老了,可能到如今已经不再适用。 1、jsp实现pdf文件在线预览功能 方式一、pdf文件理论上可以在浏览器直接打开预览但是需要打开新页面。在仅仅是预览pdf文件且UI要求不高的情况下可以直接通过a标签href属性实现预览 &lt;a href=”文档地址...

空空说技术的博客 2万+

JSP生成WORD文档

JSP生成WORD文档   [ 日期:2006-12-18 ]    来源:http://www.gs008.com/blog/blogview.asp?logID=324在web-oa系统中,公文管理好象不可或缺,有时需要从数据库中查询一些数据以某种格式输出来,并以word文档的形式展现,有时许多word文档保存到数据库中的某个表的Blob字段里,服务器再把保存在Blob字段中的图片

fan_7的专栏 1216

jsp 页面生成word文档

现场需要一个内容自动生成word文档,并自动上传到ftp的功能。        功能需求:一个维护程序,只需要填写时间和文档的基础信息,根据时间去取其他程序的数据,进行归总,并按照现场给的模板进行生成word文档。         解决方案:1.将现场提供的word的模板另存为html文件,生成之后除了html文件外,还有一些其他xml等文件,在html的head标签会引用这些文件,将其全部删

June的专栏 4017
上一篇: JSP页面内嵌PDF文档
下一篇: 使用DBLink方式同步远程数据库中含Blob、Clob字段表的问题解决
gavinloo
博客等级 码龄21年 48粉丝 53原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值