JSP中如何从MySQL中读取Blob(这里是图片)并且显示在网页上

问题描述

我的代码是这样的,可是怎么也显示不出图片到JSP页面上,我不知道哪里出错了,请各位大虾指教指教,在下不胜感激!!(首先我在MySQL中创建了数据库CUST,里面创建了数据表album:useCUST;createtablealbum(idint(6)unsignednotnullauto_increment,namevarchar(50),datablob,primarykey(id));并且编写了以下代码实现向数据库存储图片:<%@pagecontentType="text/html"pageEncoding="UTF-8"%><html><head><metahttp-equiv="Content-Type"content="text/html;charset=GB2312"><title>将图片插入数据库</title></head><bodybgcolor="#aaEEdd"><tableborder="1"cellpadding="3"cellspacing="3"bgcolor="#FF44FF"align="center"><formaction="insert.jsp"method="post"><tr><td>图片名称:</td><td><inputtype="text"name="name"size="80"></td></tr><tr><tdvalign="top">文件:</td><td><inputtype="file"name="file"></td></tr><tr><tdalign="center"><inputtype="reset"value="重置"></td><tdalign="center"><inputtype="submit"value="提交"></td></tr></form></table></body></html><%@pagecontentType="text/html"pageEncoding="UTF-8"%><%@pageimport="java.io.*,java.sql.*,javax.sql.*,javax.naming.*"%><!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http://www.w3.org/TR/html4/loose.dtd"><html><head><metahttp-equiv="Content-Type"content="text/html;charset=UTF-8"><title>将图片(Blob字段)插入数据库示例</title></head><bodybgcolor="#aaDDcc"><%java.sql.Connectionconn=null;java.lang.StringstrConn;PreparedStatementpreparedStmt=null;java.sql.StatementsqlStmt=null;java.sql.ResultSetsqlRst=null;FileInputStreamfis=null;try{Class.forName("com.mysql.jdbc.Driver");conn=java.sql.DriverManager.getConnection("jdbc:mysql://localhost:3306/CUST","root","123");sqlStmt=conn.createStatement(java.sql.ResultSet.TYPE_SCROLL_INSENSITIVE,java.sql.ResultSet.CONCUR_READ_ONLY);Stringfilelocation=request.getParameter("file");Filefiles=newFile(filelocation);fis=newFileInputStream(files);preparedStmt=conn.prepareStatement("insertintoalbum(name,data)"+"values(?,?)");preparedStmt.setString(1,request.getParameter("name"));preparedStmt.setBinaryStream(2,fis,(int)files.length());preparedStmt.executeUpdate();out.println("操作成功!");%><%}catch(java.sql.SQLExceptione){out.println(e.toString());}finally{if(fis!=null)fis.close();if(preparedStmt!=null)preparedStmt.close();if(conn!=null)conn.close();}%></body></html>然后我用了Servlet写了ShowImage.java:importjava.io.IOException;importjava.io.PrintWriter;importjava.sql.SQLException;importjavax.activation.DataSource;importjavax.annotation.Resource;importjavax.servlet.ServletException;importjavax.servlet.ServletOutputStream;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;publicclassShowImageextendsHttpServlet{@Resource(name="CUST")privateDataSourcecust;protectedvoidprocessRequest(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{java.sql.Connectionconn=null;java.lang.StringstrConn;java.sql.StatementsqlStmt=null;java.sql.ResultSetsqlRst=null;ServletOutputStreamop=response.getOutputStream();Stringphotoid="";photoid=request.getParameter("photoid");StringSQLString="select*fromalbumwhereid="+photoid;try{Class.forName("com.jdbc.odbc.Driver");conn=java.sql.DriverManager.getConnection("jdbc:mysql://localhost:3306/CUST","root","123");sqlStmt=conn.createStatement(java.sql.ResultSet.TYPE_SCROLL_INSENSITIVE,java.sql.ResultSet.CONCUR_READ_ONLY);sqlRst=sqlStmt.executeQuery(SQLString);while(sqlRst.next()){java.sql.Blobblob=sqlRst.getBlob("data");byte[]ab=blob.getBytes(0,(int)blob.length());response.setContentType("image/gif");response.reset();op.write(ab);op.flush();op.close();}sqlStmt.close();sqlRst.close();conn.close();}catch(java.sql.SQLExceptione){e.printStackTrace();}catch(Exceptione){e.printStackTrace();}}}最后写的就是显示图片到JSP页面上的代码:<%@pagecontentType="text/html"pageEncoding="UTF-8"%><html><head><metahttp-equiv="Content-Type"content="text/html;charset=UTF-8"><title>图片展示</title></head><bodybgcolor="#FFaacc"text="#223388"><h1align="center">数据库中Blob字段的处理示例</h1><table><%inti=1;while(i<2){Stringsrcstring="http://localhost:8080"+request.getContextPath()+"/ShowImage?photoid="+Integer.toString(i);%><tr><tdcolspan="3"><imgborder="1"hspace=640vspace=10src="<%=srcstring%>"></td></tr><%i++;}%></table></body></html>可是到了后面测试,语法上面没有错误,可是就是不知道哪里出现了逻辑错误,导致了JSP页面无法显示从MySQL导出的图片。请各位指点一下啊!小弟在这里先谢谢大家了啊!!!!!

解决方案

本帖最后由 xihuazhoujin 于 2011-04-02 17:22:57 编辑
解决方案二:
我没详细看,不过,你图片大吗?
解决方案三:
楼主可以修改下你的方案,图片入库的时候将图片存在服务器的某个目录下,然后将路径存在数据库中下次要显示的时候在页面上根据url加载即可。若像你那样,估计缓存是难以承受的!
解决方案四:
额……本人是菜鸟,初学者啊,先只求能够成功运行的……我是看看二楼的建议~~~~
解决方案五:
图片我考虑了的,我用的小图片:如果图片过大,会抛出异常的,我测试过了的;所以我尽量用的QQ里面的小图片,结果都不行的~~~代码笨拙且极为繁复,希望各位有耐心一下!谢谢了!
解决方案六:
一般的话都是先用数据库存如图片的路径,然后取的时候得到路径就可以显示了,用JSP语句连接一下数据库查找出来图片路径
解决方案七:
打印一下你图片路径srcstring这个变量的值然后用那个值输入到浏览器地址栏直接访问看看图片能不能显示出来

时间: 2024-08-26 03:37:49

JSP中如何从MySQL中读取Blob(这里是图片)并且显示在网页上的相关文章

用JSP从数据库中读取图片并显示在网页上

js|数据|数据库|网页|显示   环境mysql+tomcat: <1>先在mysql下建立如下的table. 并insert图像. mysql.sql文件如下: CREATE TABLE photo (photo_no int(6) unsigned NOT NULL auto_increment,image blob,PRIMARY KEY (`photo_no`)) <2>把show.jsp放在tomcat的任意目录下. show.jsp作用:从数据库中读出blob,并产生

在C#中如何从数据库中读取图片,然后显示在网页的特定位置?

问题描述 在C#中如何从数据库中读取图片,然后显示在网页的特定位置?谢谢了! 解决方案 解决方案二:用google搜索asp.net数据库图片显示你会得到很多结果

怎么监控webbrowser 中js的函数的内部非全局变量 或者可不可以动态的改写网页上的js函数?

问题描述 怎么监控webbrowser中js的函数的内部非全局变量或者可不可以动态的改写网页上的js函数?

winfrom读取图片-C#,winfrom怎么利用 listview和imageview从数据库获取图片,显示在窗体上?

问题描述 C#,winfrom怎么利用 listview和imageview从数据库获取图片,显示在窗体上? 利用winfrom,listview和imageview实现从数据库读取图片 显示在界面上. 解决方案 建议您访问我的博客:http://blog.csdn.net/u014658115/article/details/47660987

php中如何设置mysql查询读取数据的超时时间

现象: php能通过代理正常连接到mysql.但是,执行query后,一直等待,没有任何数据返回. 结果导致php-fpm进程全部阻塞在读取数据的地方.不能处理其他正常请求. 解决方法: 可以通过设置mysql查杀的超时时间来解决这个问题. 第一种设置mysql查询超时时间的方法是使用mysqlnd. 关于msyqlnd的介绍,大家可以看下这篇文章 http://www.bo56.com/php-mysqlnd-简介/ php启用mysqlnd扩展后,只要在php.ini文件中设置 mysqln

外行入门,求助,逐个读取excel表格各行数据,进行一些网页上的输入、点击操作

问题描述 在一个网页上对这些数据进行相同的处理,包含"点击.在新弹出的窗口中点击.选择下拉菜单中的某项.确定和提交",并且希望得到对这些数据处理成功还是失败的结果,办公室里经常会重复这样简单但繁琐的操作,希望找到一个好的方法来解决这类问题,今后工作就能事半功倍了,求大神指导,万谢! 解决方案 解决方案二:求大神解答!解决方案三:Java操作EXCEL用POI去做.解决方案四:引用2楼huxiweng的回复: Java操作EXCEL用POI去做. 请问我需要进行哪些方面的学习呢?解决方案

php中批量删除Mysql中相同前缀的数据表的代码

方法一: 复制代码 代码如下: <?php mysql_connect('','',''); mysql_select_db(''); $rs=mysql_query('show tables'); while($arr=mysql_fetch_array($rs)){ $TF=strpos($arr[0],'class_'); if($TF===0){ $FT=mysql_query("drop table $arr[0]"); if($FT){ echo "$arr

php中批量删除Mysql中相同前缀的数据表的代码_php技巧

方法一: 复制代码 代码如下: <?php mysql_connect('','',''); mysql_select_db(''); $rs=mysql_query('show tables'); while($arr=mysql_fetch_array($rs)){ $TF=strpos($arr[0],'class_'); if($TF===0){ $FT=mysql_query("drop table $arr[0]"); if($FT){ echo "$arr

读取rtf内容并显示到网页上

问题描述 如何读取现有的rtf内容(包含表格,图片),并且能把内容显示到网页上,我用的javajsp