用jsp上传一个图像以后怎么存到数据库中,然后再读取它让它显示到页面上呢,
如果上传的图片大小和你设置的<img src="">大小不一致该怎么办

解决方案 »

  1.   

    参看:http://blog.csdn.net/caoyinghui1986/archive/2008/04/05/2252772.aspx
    读到页面上。 用在servlet(tempServlet) 中 OutputStream os = response.getOutputStream(); 获得 os 流后。
    把数据读到流里面去 。 再在页面上  <img src="tempServlet" /> 就可以了。
      

  2.   

    //上传图片到数据库
    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;
    }
    }
      

  3.   

    //读出图片
    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;
    }
    }
      

  4.   

    //---------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>注意:我写的标签类,你可以在此基础上改一下
      

  5.   

    上传的图片保存图片的相对路径即可,最好不要保存对象,这种帖子在论坛上很多~~至于图片大小,你上传的时候可以控制哈~~如果上传的图片大小和你设置的 <img src="">大小不一致该怎么办
    答:可以在保存图片的时候保存图片的高度与宽度,如果你想不顾及图片大小显示的话直接让它显示就成哈,什么都不用改;如果你
    只想在 <img src="">这里显示固定大小的图片可以做判断,如果图片的大小不符合就不让他显示或者用替代图片来显示哈,
    跟proxy模式一样,呵呵