我用的是strust1.2+hibernate架构来实现的,现在已经实现了了图片的上传,并以2进制的格式保存到数据里面了。
如何实现把图片在jsp上面显示出来 求助!!
上传的过程大概是这样的,
首先hibernate xml映射里面这样写的 Comic.hbm.xml
........
<property name="coverPaper" type="binary">
<column name="coverPaper" />
</property>
........
Comic.java 文件里面是这样定义的...........
private byte[] coverPaper; public byte[] getCoverPaper() {
return coverPaper;
} public void setCoverPaper(byte[] coverPaper) {
this.coverPaper = coverPaper;
}.........
上传实现用的action方法
c.setUserType(sendForm.getUserType());
c.setComicType(Short.parseShort(sendForm.getComicType()));
c.setReadOrder(Short.parseShort(sendForm.getReadOrder()));
c.setStatus(Short.parseShort("1"));
c.setSubject(sendForm.getSubject());
Date dt=new Date();
c.setCreatedTime(dt);
c.setUpdatedTime(dt);
//c.setCoverPaper(new byte[0]);
//new Dao().comicinsert(c);
Hashtable files = sendForm.getMultipartRequestHandler().getFileElements();//取得页面上的file
if(files.keys()!=null){
for(Enumeration enu=files.keys();enu.hasMoreElements();){
String key=(String)enu.nextElement();
try{
FormFile formFile=(FormFile)files.get(key);
c.setCoverPaper(formFile.getFileData());
}catch(Exception ee){
ee.printStackTrace();
}
}
}
new Dao().comicinsert(c);以上就是上传时候大致代码,现在我要实现图片在jsp画面上的显示,
我自己定义了一个Action,showImageAction()用来实现读取DB2进制流,方法如下:
/*
* Generated by MyEclipse Struts
* Template path: templates/java/JavaClass.vtl
*/
package com.liyutec.struts.action;import java.io.BufferedInputStream;
import java.io.ByteArrayInputStream;
import java.io.OutputStream;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;import com.liyutec.hibernate.Comic;
import com.liyutec.hibernate.ComicDAO;/**
* MyEclipse Struts
* Creation date: 01-17-2011
*
* XDoclet definition:
* @struts.action validate="true"
*/
public class ShowImageAction extends Action {
/*
* Generated Methods
*/ /**
* 下载文件方法
* @param mapping
* @param form
* @param request
* @param response
* @return
* @throws Exception
*/
public ActionForward excute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
try{
String id=request.getParameter("id");
BufferedInputStream bis = null;
String fileName=null;
Comic c = null;
if(id==null){
bis=new BufferedInputStream(new ByteArrayInputStream(c.getCoverPaper()));
// fileName = new String(c.getFileRealName().getBytes(), "iso8859-1");
} else{
c=(Comic)new ComicDAO().findById(Long.valueOf(id));
bis=new BufferedInputStream(new ByteArrayInputStream(c.getCoverPaper()));
// fileName=new String(c.getFileRealName().getBytes(), "iso8859-1");
}
response.reset();
response.setContentType("application/x-download");
response.addHeader("Content-Disposition", "attachment;filename=" + fileName);
OutputStream out=response.getOutputStream();
byte[] buffer = new byte[5120];
int size = 0;
while ((size = bis.read(buffer, 0, buffer.length)) != -1) {
out.write(buffer, 0, size);
//System.out.println("---------------"+ImageUtil.getImageType(buffer));
}
}catch(Exception e){
e.printStackTrace();
}
return null;
}
}
jsp显示图片的代码如下:
<dd class="img"><span><img src='<%=request.getContextPath() %>/jsp/showImage.do?id=${c.comicId} alt="图片格式错误" ' /></span></dd>
现在的问题是load到INDEX画面的时候没有调用到jsp/showImage.do这个action
求教如何实现!
如何实现把图片在jsp上面显示出来 求助!!
上传的过程大概是这样的,
首先hibernate xml映射里面这样写的 Comic.hbm.xml
........
<property name="coverPaper" type="binary">
<column name="coverPaper" />
</property>
........
Comic.java 文件里面是这样定义的...........
private byte[] coverPaper; public byte[] getCoverPaper() {
return coverPaper;
} public void setCoverPaper(byte[] coverPaper) {
this.coverPaper = coverPaper;
}.........
上传实现用的action方法
c.setUserType(sendForm.getUserType());
c.setComicType(Short.parseShort(sendForm.getComicType()));
c.setReadOrder(Short.parseShort(sendForm.getReadOrder()));
c.setStatus(Short.parseShort("1"));
c.setSubject(sendForm.getSubject());
Date dt=new Date();
c.setCreatedTime(dt);
c.setUpdatedTime(dt);
//c.setCoverPaper(new byte[0]);
//new Dao().comicinsert(c);
Hashtable files = sendForm.getMultipartRequestHandler().getFileElements();//取得页面上的file
if(files.keys()!=null){
for(Enumeration enu=files.keys();enu.hasMoreElements();){
String key=(String)enu.nextElement();
try{
FormFile formFile=(FormFile)files.get(key);
c.setCoverPaper(formFile.getFileData());
}catch(Exception ee){
ee.printStackTrace();
}
}
}
new Dao().comicinsert(c);以上就是上传时候大致代码,现在我要实现图片在jsp画面上的显示,
我自己定义了一个Action,showImageAction()用来实现读取DB2进制流,方法如下:
/*
* Generated by MyEclipse Struts
* Template path: templates/java/JavaClass.vtl
*/
package com.liyutec.struts.action;import java.io.BufferedInputStream;
import java.io.ByteArrayInputStream;
import java.io.OutputStream;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;import com.liyutec.hibernate.Comic;
import com.liyutec.hibernate.ComicDAO;/**
* MyEclipse Struts
* Creation date: 01-17-2011
*
* XDoclet definition:
* @struts.action validate="true"
*/
public class ShowImageAction extends Action {
/*
* Generated Methods
*/ /**
* 下载文件方法
* @param mapping
* @param form
* @param request
* @param response
* @return
* @throws Exception
*/
public ActionForward excute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
try{
String id=request.getParameter("id");
BufferedInputStream bis = null;
String fileName=null;
Comic c = null;
if(id==null){
bis=new BufferedInputStream(new ByteArrayInputStream(c.getCoverPaper()));
// fileName = new String(c.getFileRealName().getBytes(), "iso8859-1");
} else{
c=(Comic)new ComicDAO().findById(Long.valueOf(id));
bis=new BufferedInputStream(new ByteArrayInputStream(c.getCoverPaper()));
// fileName=new String(c.getFileRealName().getBytes(), "iso8859-1");
}
response.reset();
response.setContentType("application/x-download");
response.addHeader("Content-Disposition", "attachment;filename=" + fileName);
OutputStream out=response.getOutputStream();
byte[] buffer = new byte[5120];
int size = 0;
while ((size = bis.read(buffer, 0, buffer.length)) != -1) {
out.write(buffer, 0, size);
//System.out.println("---------------"+ImageUtil.getImageType(buffer));
}
}catch(Exception e){
e.printStackTrace();
}
return null;
}
}
jsp显示图片的代码如下:
<dd class="img"><span><img src='<%=request.getContextPath() %>/jsp/showImage.do?id=${c.comicId} alt="图片格式错误" ' /></span></dd>
现在的问题是load到INDEX画面的时候没有调用到jsp/showImage.do这个action
求教如何实现!
解决方案 »
- struts2 上传一段时间后报错No result defined for action and result input重启后便没有问题了。
- JAVASCRIPT下拉列表关联
- expected NUMBER got BINARY
- 伤自尊了,java类定义还可以带小数点的,这是什么版本加进来的新特性?
- 取单个的字符串
- 问Tomcat启动时候的问题!(急)
- 怎样在客户端进行简单的用户提交信息检验
- javascript中如何执行鼠标双击事件?
- 一个关于SYBASE的JDBC的问题!急!
- 哪里有用JSP编的论坛源程序啊????????小弟急用!!!!!!
- hibernate annotation 怎么为可以为空的列加上默认值
- 为什么在firefox一切正常,IE里面就有错呢?还是flexigrid问题
求教如何实现!楼主自己都这么说了,请求没有到大ACTION,肯定是servlet或者action路径配置出错或者src访问的路径错误
问题解决了 我把JSP 掉Action的地方改成调一个servlet了就行了,写了个servlet
哎 不知道为什么不能掉Action,网上看到有人就这么写的。
总之问题解决了先凑合用着。修改前
<span><img src='<%=request.getContextPath() %>/jsp/showImage.do?id=${c.comicId} alt="图片格式错误" ' /></span></
修改后
<span><img alt="图片格式错误" src="<%=request.getContextPath()%>/ImageServlet?id=${c.comicId}" /></span>