java 使用struts 2和hibernate在jsp页面中显示Blob(图像)
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/10054958/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
displaying Blob (image) in jsp page using struts 2 and hibernate
提问by MoienGK
i managed to store an image in my mysql database as Blob. (i am also using hibernate) now i am trying to load that image and send it on a jsp page so the user can view the image.
我设法将图像作为 Blob 存储在我的 mysql 数据库中。(我也在使用休眠)现在我正在尝试加载该图像并将其发送到 jsp 页面上,以便用户可以查看该图像。
This is my struts 2 action class
这是我的 struts 2 动作类
import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.sql.Blob; import org.hibernate.Hibernate; import domain.post.image.Image; public class FileUploadAction { private File file; @SuppressWarnings("deprecation") public String execute() { try { System.out.println(file.getPath()); Image image = new Image(); FileInputStream fi = new FileInputStream(file); Blob blob = Hibernate.createBlob(fi); image.setImage(blob); image.save(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return "success"; } public File getFile() { return file; } public void setFile(File file) { this.file = file; }
import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.sql.Blob; import org.hibernate.Hibernate; import domain.post.image.Image; public class FileUploadAction { private File file; @SuppressWarnings("deprecation") public String execute() { try { System.out.println(file.getPath()); Image image = new Image(); FileInputStream fi = new FileInputStream(file); Blob blob = Hibernate.createBlob(fi); image.setImage(blob); image.save(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return "success"; } public File getFile() { return file; } public void setFile(File file) { this.file = file; }
and this is my Image class
这是我的 Image 类
public class Image extends AbsDBObject<Object> { private static final long serialVersionUID = 1L; private static Logger logger = Logger.getLogger(Image.class); private Blob image; private String description; //Getters and Setters }
public class Image extends AbsDBObject<Object> { private static final long serialVersionUID = 1L; private static Logger logger = Logger.getLogger(Image.class); private Blob image; private String description; //Getters and Setters }
would you please tell me what should i put in an action class, jsp page and struts.xml in order to showing the stored image?
你能告诉我我应该在动作类、jsp 页面和 struts.xml 中放什么来显示存储的图像吗?
回答by MoienGK
Finally I solved it, for future googlers :
最后我解决了它,对于未来的谷歌员工:
Add this line to jsp,
将此行添加到jsp,
<img src="<s:url value="YourImageShowAction" />" border="0"
width="100" height="100">
and this is ShowImageAction
class : note that the execute method is void, so no redirection
这是ShowImageAction
类:注意execute方法是无效的,所以没有重定向
import java.io.IOException; import java.io.OutputStream; import java.sql.SQLException; import javax.servlet.http.HttpServletResponse; import org.apache.struts2.ServletActionContext; import com.raysep.maxlist.domain.post.image.Image; public class ShowImageAction { private static byte[] itemImage; public static void execute() { try { Image slika = Image.fetchOne(); HttpServletResponse response = ServletActionContext.getResponse(); response.reset(); response.setContentType("multipart/form-data"); itemImage = slika.getImage().getBytes(1,(int) slika.getImage().length()); OutputStream out = response.getOutputStream(); out.write(itemImage); out.flush(); out.close(); } catch (SQLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public byte[] getItemImage() { return itemImage; } public void setItemImage(byte[] itemImage) { this.itemImage = itemImage; } }
import java.io.IOException; import java.io.OutputStream; import java.sql.SQLException; import javax.servlet.http.HttpServletResponse; import org.apache.struts2.ServletActionContext; import com.raysep.maxlist.domain.post.image.Image; public class ShowImageAction { private static byte[] itemImage; public static void execute() { try { Image slika = Image.fetchOne(); HttpServletResponse response = ServletActionContext.getResponse(); response.reset(); response.setContentType("multipart/form-data"); itemImage = slika.getImage().getBytes(1,(int) slika.getImage().length()); OutputStream out = response.getOutputStream(); out.write(itemImage); out.flush(); out.close(); } catch (SQLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public byte[] getItemImage() { return itemImage; } public void setItemImage(byte[] itemImage) { this.itemImage = itemImage; } }