1、数据结构:
CREATE TABLE [photo] (
[id] [int] IDENTITY (1, 1) NOT NULL ,
[ordernumber] [nvarchar] (20)[photo] [image] NULL ,
PRIMARY KEY CLUSTERED
(
[id]
) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
2、整体架构:struts2+spring2+hibernate3
3、vo结构:
public class Photo implements Serializable
{
private int id;
private String ordernum;
private byte[] photo;
......省get(),set()方法
}
4、数据存取DAO:
public interface PhotoDao
{
public void savePhoto(Photo photo);
public Photo getPhoto(String ordername);
}
5、实现
public class PhotoDaoHibernate extends HibernateDaoSupport implements PhotoDao
{
@Override
public Photo getPhoto(String ordername)
{
List list=this.getHibernateTemplate().find("from Photo where ordernum=?",ordername);
System.out.println("listsize"+list.size()+";filename:"+ordername);
if(list.size()>0)
{
return (Photo)list.get(0);
}
else
{
return null;
}
}
@Override
public void savePhoto(Photo photo)
{
this.getHibernateTemplate().save(photo);
}
}
5、上传Action
public class UpLoadPhoto extends ActionSupport
{
private PhotoDao pdi;//pdi为通过spring注入的Dao实例,用于把Photo对象存入数据库
private String filename;
private File upload;
private InputStream inputStream;
public void setInputStream(InputStream inputStream)
{
this.inputStream = inputStream;
}
public String upload()
{
if(filename!=null && !"".equals(filename))
{
Photo photo=new Photo();
photo.setOrdernum(filename);
photo.setPhoto(getBytesFromFile(upload));
System.out.println(photo.getOrdernum()+photo.getPhoto());
pdi.savePhoto(photo);
}
return SUCCESS;
}
public static byte[] getBytesFromFile( File file ) {
long length = file.length();
byte[] bytes = new byte[(int)length];
try {
InputStream is = new FileInputStream(file);
// Read in the bytes
int offset = 0;
int numRead = 0;
while (offset < bytes.length
&& (numRead=is.read(bytes, offset, bytes.length-offset)) >= 0) {
offset += numRead;
}
// Ensure all the bytes have been read in
if (offset < bytes.length) {
throw new IOException("Could not completely read file "+file.getName());
}
// Close the input stream and return bytes
is.close();
} catch(Exception e ) {
throw new RuntimeException(e);
}
return bytes;
}
}
*/
public PhotoDao getPdi()
{
return pdi;
}
public void setPdi(PhotoDao pdi)
{
this.pdi = pdi;
}
public String getFilename()
{
return filename;
}
public void setFilename(String filename)
{
this.filename = filename;
}
public File getUpload()
{
return upload;
}
public void setUpload(File upload)
{
this.upload = upload;
}
}
6、jsp上传
<s:form action="uploadfile" method="post" enctype="multipart/form-data">
<s:file name="upload"/>
文件名:<s:textfield name="filename"/>
<s:submit value="图片上传"></s:submit>
</s:form>
7、用于从数居库显示图片的Action
public class ShowPhoto extends ActionSupport
{
private PhotoDao pdi;
private String filename;
public String getFilename()
{
return filename;
}
public void setFilename(String filename)
{
this.filename = filename;
}
public PhotoDao getPdi()
{
return pdi;
}
public void setPdi(PhotoDao pdi)
{
this.pdi = pdi;
}
@Override
public String execute() throws Exception
{
// TODO Auto-generated method stub
return SUCCESS;
}
public InputStream getInputStream()
{
Photo photo=new Photo();
try
{
photo=pdi.getPhoto(filename);
} catch (RuntimeException e)
{
e.printStackTrace();
}
if(photo==null||photo.getPhoto()==null)
{
return null;
}
else
{
System.out.println(photo.getOrdernum());
System.out.println(photo.getPhoto());
System.out.println("Image_Lenghth:"+photo.getPhoto().length);
ByteArrayInputStream bais;
try
{
bais = new ByteArrayInputStream(photo.getPhoto());
return bais;
} catch (RuntimeException e)
{
e.printStackTrace();
return null;
}
}
}
}
8、jsp中显示图片
<s:url id="image" action="getPhoto?filename=ck" /><!--ck为数据库中查找图片的关键字(上传时设的文件名)-->
<img src="<s:property value="#image"/>"/>
9、struts.xml配置
<action name="uploadfile" class="uploadfile" method="upload"><!-- 指定逻辑方法method -->
<result name="success">/success.jsp</result>
</action>
<action name="getPhoto" class="getPhoto" >
<result name="success" type="stream">
<param name="contentType">image/jpeg</param>
<param name="inputName">inputStream</param>
<param name="contentDisposition">attachment;filename="s.jpg"</param><!--指定默认文件名-->
<param name="bufferSize">1024</param>><!--指定缓存大小-->
</result>
</action>
分享到:
相关推荐
在数据库中存储图片后,我们需要提供一个方法来从数据库中读取图片并显示在页面上。这可能涉及到创建一个新的Action或者在现有Action中添加一个新方法,该方法将查询数据库获取图片数据,并将其发送到响应。 ```...
在“struts1上传图片,保存数据库,再显示jsp页面”这个场景中,我们将探讨如何利用Struts1实现文件上传,将图片数据保存到数据库,并在JSP页面上展示。 1. **Struts1的文件上传组件**: Struts1并不直接支持文件...
在这个场景中,“ssh保存图片到数据库”指的是使用SSH框架将图片数据存储到数据库中,以便于在应用中进行管理和展示。通常,这涉及到几个关键步骤: 1. **读取图片**:首先,你需要一个用户接口来上传图片,可能是...
在本项目"struts2+jdbc实现图片的存储与显示(图片存储在数据库内)"中,我们将探讨如何结合这两个技术来处理图片数据,将图片存储到数据库内,并从数据库中检索以供显示。 首先,我们需要了解在数据库中存储图片的...
本文将详细介绍如何利用Struts2框架结合Spring和Hibernate技术栈实现图片的上传、存储至MySQL数据库以及从数据库读取并在Web页面展示的功能。整个过程不涉及Servlet的操作。 #### 需求分析与实现目标 1. **图片...
本文将详细介绍如何使用Struts结合JDBC操作Oracle数据库中的Blob字段实现文件的保存和读取。 #### 代码分析 根据提供的部分代码示例,我们可以将其分为两个主要部分:文件保存和文件读取。 ##### 文件保存 文件...
4. 创建一个方法从数据库读取图片数据。 5. 在JSP页面中使用合适的方法显示图片数据,如`data:` URL或JavaScript。 这种做法的优点是易于管理和检索,但缺点是可能会增大数据库的负担,不适合大量图片存储。对于...
在保存图片时,将转换后的字节数组设置到对应的属性中,然后通过Hibernate的`Session`对象进行持久化操作。 5. **异常处理**:在处理过程中,应确保捕获可能的异常,如文件过大、格式不正确或数据库操作失败等,并...
要从数据库中读取并显示图片,可以创建一个`displayImage` Action,查询相应的记录,然后将BLOB数据转换回InputStream,通过HTTP响应发送给客户端。需要注意的是,这通常不建议直接在网页上展示,因为可能会导致性能...
### Java + MySQL中保存图片及显示上传的图片(Struts + Hibernate) #### 一、概述 在Web开发中,处理用户上传的图片是一项常见的需求。本文档将详细介绍如何使用Java结合MySQL数据库,以及Struts和Hibernate框架...
在这个"struts1.2 图片上传下载 源代码"中,我们可以学习到如何利用Struts1.2框架来实现这一功能。 首先,我们需要了解Struts1.2中的ActionForm类。ActionForm是模型层与控制器层之间的桥梁,用于接收和封装用户的...
这通常包括读取上传文件,将其保存到服务器的某个位置,例如Tomcat的webapp目录下。代码可能如下: ```java public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, ...
Struts2.0图片上传是Web开发中常见的一项功能,涉及到的主要知识点包括Struts2框架、文件上传处理、IO流操作以及配置文件的设定。在本文中,我们将深入探讨这些内容,帮助你理解和实现Struts2.0环境下的图片上传功能...
在响应中,服务器可以返回图片的URL或状态信息,前端接收到这些信息后更新页面,显示上传的图片,而无需刷新整个页面。 此外,为了提高用户体验,我们还可以添加进度条显示文件上传进度,这需要利用HTML5的File API...
在这个“Struts2+Hibernate实现文件上传”的项目中,我们将探讨如何结合这两个框架来实现在Web应用中上传图片并存储到数据库的过程。 首先,让我们从Struts2的角度来看。Struts2提供了一种灵活的MVC(模型-视图-...
处理上传逻辑时,可以读取文件内容并保存到服务器的指定位置: ```java public String execute() { if (image != null && !image.isEmpty()) { String savePath = "uploads/" + imageFileName; try { File save...
当需要展示图片时,从数据库中取出Base64编码的字符串,然后在HTML中使用`data:` URL方案,将Base64字符串插入到`<img>`标签的`src`属性中,浏览器会自动解码并显示图片。 总结来说,Struts2中以Base64方式上传...
在Struts框架中,文件上传功能是一个常见的需求,尤其是在处理用户提交表单时,比如上传图片、文档等。在这个例子中,我们将探讨如何在Struts中实现文件上传,并了解一些基本的页面标签用法。 首先,文件上传在...
用户可以通过前端页面上传图片,服务器端接收并保存到指定目录,同时可能还需要处理图片的大小、格式限制等问题。 4. **前端技术**:前端使用了Bootstrap框架,这是一个流行的响应式网页设计工具,可以快速构建美观...
这个页面通过迭代器遍历数据库中的文件记录,并显示对应的图片。 最后,别忘了在Struts2的配置文件(`struts.xml`)中定义Action和结果,以便Struts2知道如何处理用户的请求和返回结果: ```xml <struts> <!-- 其他...