jsp上传图像问题 用jsp上传一个图像以后怎么存到数据库中,然后再读取它让它显示到页面上呢,如果上传的图片大小和你设置的<img src="">大小不一致该怎么办 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 参看:http://blog.csdn.net/caoyinghui1986/archive/2008/04/05/2252772.aspx读到页面上。 用在servlet(tempServlet) 中 OutputStream os = response.getOutputStream(); 获得 os 流后。把数据读到流里面去 。 再在页面上 <img src="tempServlet" /> 就可以了。 //上传图片到数据库import java.io.FileInputStream;import java.sql.Connection;import java.sql.ResultSet;import java.sql.Statement;import javax.naming.Context;import javax.naming.InitialContext;import javax.servlet.jsp.tagext.TagSupport;import javax.sql.DataSource;import com.jspsmart.upload.SmartUpload;public class AcceptBookImgTag extends TagSupport{ public int doStartTag(){ SmartUpload su = new SmartUpload(); try{ su.initialize(pageContext); su.setAllowedFilesList("jpg,bmp,gif"); su.upload(); su.save("/upload"); String filename = su.getFiles().getFile(0).getFileName(); filename = pageContext.getServletContext().getRealPath("/upload/" + filename); System.out.println(filename + "***"); FileInputStream bookImgFile = new FileInputStream(filename); Context initCtx = new InitialContext(); Context ctx = (Context)initCtx.lookup("java:comp/env"); Object obj = (Object)ctx.lookup("jdbc/sqlserver"); DataSource ds = (javax.sql.DataSource)obj; Connection conn = ds.getConnection(); Statement selectSQL = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); ResultSet rs = selectSQL.executeQuery("select book_image from book where book_id='" + su.getRequest().getParameter("book_id")); rs.next(); rs.updateBinaryStream("book_image", bookImgFile, bookImgFile.available()); rs.updateRow(); }catch(Exception e){ e.printStackTrace(); } return SKIP_BODY; }} //读出图片import java.io.InputStream;import java.sql.Connection;import java.sql.ResultSet;import java.sql.Statement;import javax.naming.Context;import javax.naming.InitialContext;import javax.servlet.ServletOutputStream;import javax.servlet.jsp.tagext.TagSupport;import javax.sql.DataSource;public class ShowBookImgTag extends TagSupport{ public long book_id; public int doStartTag(){ try{ Context initCtx = new InitialContext(); Context ctx = (Context)initCtx.lookup("java:comp/env"); Object obj = (Object)ctx.lookup("jdbc/sqlserver"); DataSource ds = (javax.sql.DataSource)obj; Connection conn = ds.getConnection(); Statement stmt = conn.createStatement(); String strSql = "select book_id,book_image from book where book_id=" + book_id; ResultSet rs = stmt.executeQuery(strSql); if(rs!=null){ rs.next(); InputStream in = rs.getBinaryStream("book_image"); if(in!=null){ byte[] tempByteArray = toImageByteArray(in); ServletOutputStream tempOutStream = pageContext.getResponse().getOutputStream(); tempOutStream.write(tempByteArray); tempByteArray = null; } in = null; rs.close(); conn.close(); } }catch(Exception e){ e.printStackTrace(); } return SKIP_BODY; } private byte[] toImageByteArray(InputStream in){ if(in!=null){ try{ int len = 10*1024*1024; byte[] P_Buf = new byte[len]; int j; byte[] newByteArray = null; if((j = in.read(P_Buf))!=-1){ newByteArray = new byte[j]; for(int k=0 ; k<j; k++){ newByteArray[k] = P_Buf[k]; } } P_Buf = null; return newByteArray; }catch(Exception e){ e.printStackTrace(); } } return null; } public long getBook_id() { return book_id; } public void setBook_id(long book_id) { this.book_id = book_id; }} //---------showbookimg.jsp-----------------<%@ page contentType="image/jpg;charset=GB2312" %><%@ taglib prefix="csai" uri="/WEB-INF/csai.tld" %><%@ page isELIgnored="false"%><csai:showBookImgTag book_id="${param.bookid}"/><tr> <td><img border="0" src="book/showbookimg.jsp?bookid=${book[0]}" height="280"></td> <td><font size="2" color="#000080"> <a href="buy/addBookToCar.jsp?book_id=${book[0]}">放入购物车</a><br> 书名:${book[1]}<br> 出版社:${book[2]}<br> 作者:${book[3]}<br> 原价:<fmt:formatNumber value="${book[4]}" maxFractionDigits="2"/><br> 折后价:<fmt:formatNumber value="${book[4]*book[5]/10}" maxFractionDigits="2"/> (<fmt:formatNumber value="${book[5]}" maxFractionDigits="1"/>折)<br> 页数:${book[6]}<br> 开本:${book[7]}<br> 内容简介:<br> ${book[8]}<br> </font></td></tr>注意:我写的标签类,你可以在此基础上改一下 上传的图片保存图片的相对路径即可,最好不要保存对象,这种帖子在论坛上很多~~至于图片大小,你上传的时候可以控制哈~~如果上传的图片大小和你设置的 <img src="">大小不一致该怎么办答:可以在保存图片的时候保存图片的高度与宽度,如果你想不顾及图片大小显示的话直接让它显示就成哈,什么都不用改;如果你只想在 <img src="">这里显示固定大小的图片可以做判断,如果图片的大小不符合就不让他显示或者用替代图片来显示哈,跟proxy模式一样,呵呵 Struts2命名空间的问题 小弟自学jsp,花了三个月时间,做了这么一个软件,请大家多多指教。 请问一下,怎么将jsp文件转换为XHTML给用户浏览? My-Eclipse老是过期怎么办啊? 在线急等,关于jspSmartUpload解决request.getparameter不能获得值的问题 问一个多线程的循环实现问题 动态的生成可以提交的表单,并且可以全部提交:我已经停在这里好几天了!!! 请问如何在jsp页面中显示图片? 怎样取到time的hour小时 关于Servlet问题 firefox对JRE支持问题 JSP中可以时间信息提示管理员吗?求教!
读到页面上。 用在servlet(tempServlet) 中 OutputStream os = response.getOutputStream(); 获得 os 流后。
把数据读到流里面去 。 再在页面上 <img src="tempServlet" /> 就可以了。
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.servlet.jsp.tagext.TagSupport;
import javax.sql.DataSource;
import com.jspsmart.upload.SmartUpload;public class AcceptBookImgTag extends TagSupport{
public int doStartTag(){
SmartUpload su = new SmartUpload();
try{
su.initialize(pageContext);
su.setAllowedFilesList("jpg,bmp,gif");
su.upload();
su.save("/upload");
String filename = su.getFiles().getFile(0).getFileName();
filename = pageContext.getServletContext().getRealPath("/upload/" + filename);
System.out.println(filename + "***");
FileInputStream bookImgFile = new FileInputStream(filename);
Context initCtx = new InitialContext();
Context ctx = (Context)initCtx.lookup("java:comp/env");
Object obj = (Object)ctx.lookup("jdbc/sqlserver");
DataSource ds = (javax.sql.DataSource)obj;
Connection conn = ds.getConnection();
Statement selectSQL = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
ResultSet rs = selectSQL.executeQuery("select book_image from book where book_id='" + su.getRequest().getParameter("book_id"));
rs.next();
rs.updateBinaryStream("book_image", bookImgFile, bookImgFile.available());
rs.updateRow();
}catch(Exception e){
e.printStackTrace();
}
return SKIP_BODY;
}
}
import java.io.InputStream;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;import javax.naming.Context;
import javax.naming.InitialContext;
import javax.servlet.ServletOutputStream;
import javax.servlet.jsp.tagext.TagSupport;
import javax.sql.DataSource;public class ShowBookImgTag extends TagSupport{
public long book_id;
public int doStartTag(){
try{
Context initCtx = new InitialContext();
Context ctx = (Context)initCtx.lookup("java:comp/env");
Object obj = (Object)ctx.lookup("jdbc/sqlserver");
DataSource ds = (javax.sql.DataSource)obj;
Connection conn = ds.getConnection();
Statement stmt = conn.createStatement();
String strSql = "select book_id,book_image from book where book_id=" + book_id;
ResultSet rs = stmt.executeQuery(strSql);
if(rs!=null){
rs.next();
InputStream in = rs.getBinaryStream("book_image");
if(in!=null){
byte[] tempByteArray = toImageByteArray(in);
ServletOutputStream tempOutStream = pageContext.getResponse().getOutputStream();
tempOutStream.write(tempByteArray);
tempByteArray = null;
}
in = null;
rs.close();
conn.close();
}
}catch(Exception e){
e.printStackTrace();
}
return SKIP_BODY;
}
private byte[] toImageByteArray(InputStream in){
if(in!=null){
try{
int len = 10*1024*1024;
byte[] P_Buf = new byte[len];
int j;
byte[] newByteArray = null;
if((j = in.read(P_Buf))!=-1){
newByteArray = new byte[j];
for(int k=0 ; k<j; k++){
newByteArray[k] = P_Buf[k];
}
}
P_Buf = null;
return newByteArray;
}catch(Exception e){
e.printStackTrace();
}
}
return null;
} public long getBook_id() {
return book_id;
} public void setBook_id(long book_id) {
this.book_id = book_id;
}
}
<%@ page contentType="image/jpg;charset=GB2312" %>
<%@ taglib prefix="csai" uri="/WEB-INF/csai.tld" %>
<%@ page isELIgnored="false"%>
<csai:showBookImgTag book_id="${param.bookid}"/>
<tr>
<td><img border="0" src="book/showbookimg.jsp?bookid=${book[0]}" height="280"></td>
<td><font size="2" color="#000080">
<a href="buy/addBookToCar.jsp?book_id=${book[0]}">放入购物车</a><br>
书名:${book[1]}<br>
出版社:${book[2]}<br>
作者:${book[3]}<br>
原价:<fmt:formatNumber value="${book[4]}" maxFractionDigits="2"/><br>
折后价:<fmt:formatNumber value="${book[4]*book[5]/10}" maxFractionDigits="2"/>
(<fmt:formatNumber value="${book[5]}" maxFractionDigits="1"/>折)<br>
页数:${book[6]}<br>
开本:${book[7]}<br>
内容简介:<br>
${book[8]}<br>
</font></td>
</tr>注意:我写的标签类,你可以在此基础上改一下
答:可以在保存图片的时候保存图片的高度与宽度,如果你想不顾及图片大小显示的话直接让它显示就成哈,什么都不用改;如果你
只想在 <img src="">这里显示固定大小的图片可以做判断,如果图片的大小不符合就不让他显示或者用替代图片来显示哈,
跟proxy模式一样,呵呵