SSH 实现文件上传和下载
本文将围绕 SSH 文件上传下载的主题,讲述如何开发基于 SSH 的 Web 程序。SSH 框架的版本为 Struts 1.2、Spring 1.2.5、Hibernate 3.0,本文选用的数据库为 Oracle 9i。
文件上传和下载是 J2EE 编程中一个古老而重要的话题,SSH 框架提供了一个简捷方便的文件上传下载的方案,通过一些配置和少量的代码就可以完好解决这个问题。
总体实现
上传文件保存到 T_FILE 表中,T_FILE 表结构如下:
·FILE_ID:文件 ID,32 个字符,用 Hibernate 的 uuid.hex 算法生成。
·FILE_NAME:文件名。
·FILE_CONTENT:文件内容,对应 Oracle 的 Blob 类型。
·REMARK:文件备注。
文件数据存储在 Blob 类型的 FILE_CONTENT 表字段上,在 Spring 中采用 OracleLobHandler 来处理 Lob 字段,屏蔽了不同数据库处理 Lob 字段方法上的差别,从而撤除程序在多数据库移植上的樊篱。
在 Java 领域对象中,Blob 字段声明为 byte[] 类型,而非 java.sql.Blob 类型。在 Hibernate 持久化映射文件中,Blob 字段的类型为 org.springframework.orm.hibernate3.support.BlobByteArrayType,即 Spring 所提供的用户自定义的类型。
在 Spring 中使用 org.springframework.jdbc.support.lob.OracleLobHandler 处理 Oracle 数据库的 Blob 类型字段。通过这样的设置和配置,我们就可以象持久化表的一般字段类型一样处理 Blob 字段了。
文件上传的页面如图 3 所示,文件下载页面如图 4 所示,该工程的资源结构如图 5 所示。
数据持久层
在数据持久层中,我们需要编写领域对象和映射文件,可以使用 Hibernate Middlegen、HIbernate Tools、Hibernate Syhchronizer 等工具或手工的方式编写。
领域对象 Tfile.java 的代码如下:
public class Tfile {
private String fileId;
private String fileName;
private byte[] fileContent;
private String remark;
//getter and setter
}
需要注意的是:数据库表为 Blob 类型的字段在 Tfile 中的声明为 byte[] 类型,而非 java.sql.Blob 类型。
业务层
在业务层中,我们需要编写业务逻辑来处理文件上传和下载的操作。在 SSH 框架中,我们可以使用 Struts 的 ActionForm 来处理表单提交的文件数据。
Web 层
在 Web 层中,我们需要编写 JSP 页面来上传和下载文件。文件上传页面如图 3 所示,文件下载页面如图 4 所示。
通过 SSH 框架的配置和少量的代码,我们可以轻松实现文件上传和下载的功能。
- 1
- 2
- 3
- 4
- 5
前往页