我设法将我的mysql数据库中的图像存储为Blob。 (我也在使用休眠) 现在我正在尝试加载该图像并将其发送到jsp页面,以便用户可以查看图像。
这是我的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; }
这是我的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 }
请您告诉我应该在动作类,jsp页面和struts.xml中放置什么才能显示存储的图像?
答案 0 :(得分:5)
最后我解决了这个问题,对于未来的googlers:
将此行添加到jsp,
<img src="<s:url value="YourImageShowAction" />" border="0"
width="100" height="100">
这是ShowImageAction
类:请注意,execute方法是void,因此没有重定向
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; } }