问题描述
我的代码是这样的,可是怎么也显示不出图片到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这个变量的值然后用那个值输入到浏览器地址栏直接访问看看图片能不能显示出来