在使用Struts1实现文件上传(一)中,我将文件保存在服务器端的硬盘里,有没有办法将其保存在Oracle10g数据库中呢?答案是肯定的,只需要对程序稍加改造就可以实现将文件保存在数据库中。用到时再将文件从数据库中还原出来供用户下载。
在数据库中保存文件的方法和保存其他基本数据类型相差不多,只是要存入即可,但是其对应的数据类型比较特殊,一般选择二进制的数据类型。Oracle10g中提供了RAW和Long RAW数据类型,这两中数据类型用于保存二进制的数据;二进制类型的好处在于当数据在不同系统之间传输时,可以不做任何数据类型的转换,方便了系统之间的操作。RAW类型的最大宽度为2000字节,而Long RAW类型的最大宽度可以达到2GB,非常适合保存图像、声音、视频等数据量较大的数据。
因此,要想将文件保存在数据库中用到时在取出来,就要完成三个步骤:
(1)新建Oracle10g数据表,在表中添加Long RAW类型的字段;
(2)在程序中将上传的文件以流的形式保存到数据库中;
(3)将文件从数据库中还原出来。
一、新建Oracle10g数据表
在Oracle10g中新建一张数据表,如命名为UploadFiles,在表中添加相应的字段;
create table UploadFiles
(
fileId number not null,
fileName varchar2(100) not null,
fileContent long raw not null,
filePubDate date not null
)
其中FileContent便是用来存放文件的Long RAW二进制数据类型。
二、将上传文件保存在数据库
剩下的工作便是在程序中编写代码将用户上传的文件保存在数据库中了,主要的代码已经在文章“使用Struts1实现文件上传(一)”中实现,现在只需要将原来保存在文件中的部分代码替换为保存在数据库的代码即可。
UploadForm uploadForm = (UploadForm) form;
FormFile uploadFile = uploadForm.getUploadFile();
Connection conn = null;
PreparedStatement ps = null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:DataBaseName","username","password");
String sql = "insert into pic (fileName,fileContent,filePubDate) values (?,?,?)";
ps = conn.prepareStatement(sql);
ps.setString(1, uploadFile.getFileName());
ps.setBinaryStream(2, uploadFile.getInputStream(), uploadFile.getFileSize());
ps.setDate(3, new Date());
ps.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}
当用户点击上传后就可以将文件存储在数据库中了。
三、将文件从数据库中还原出来
当用户需要用到文件时,就需要从数据中将文件查询出来,方法也很简单,看代码:
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
InputStream input = null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:DataBaseName","username","password");
String sql = "select * from UpLoadFiles where id = 3";
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
if(rs.next()){
input = rs.getBinaryStream("pic");
}
//根据需要操作InputStream对象的代码;
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
rs.close();
ps.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
将文件从数据库中读取出来后得到的将是一个InputStream类型的对象,可以根据需要操作这个对象还原文件。
(完) xusweeter @ 2010年08月07日 晚 23:45
分享到:
相关推荐
### Struts1 实现文件上传的关键技术点 在Struts1框架中实现文件上传功能是一项常见但又具有一定技术挑战的任务。下面将详细解析文件上传的实现过程,包括关键类的使用、文件处理逻辑以及异常处理等方面。 #### ...
在这个“Struts1实现文件上传源码”实例中,我们将深入探讨如何利用Struts1框架来处理文件上传操作。 在Web应用中,文件上传功能是非常常见的,比如用户上传头像、提交文档等。Struts1提供了ActionForm类和一系列...
总结起来,使用Struts实现文件上传下载涉及前端表单设计、后端处理逻辑、文件存储策略以及安全控制等多个方面。在实践中,我们还需要考虑到性能优化和用户体验提升,例如使用异步上传、进度条展示等技术。
Struts2是一个强大的MVC(模型-视图-控制器)框架,广泛应用于Java ...以上就是使用Struts2框架实现文件上传下载的基本步骤和关键知识点。在实际开发中,可以根据项目需求进行调整和优化,确保功能的稳定性和安全性。
在这个“Struts1实现的文件上传”项目中,我们将深入探讨如何在Struts1框架下实现文件上传功能,并不涉及文件下载的部分。 首先,理解文件上传的基本流程是至关重要的。在Web应用中,用户通过HTML表单选择本地文件...
本篇文章将详细讲解如何利用Struts2.2和Hibernate3.6实现文件的上传与动态下载。 **一、文件上传** 1. **环境配置**:首先,你需要一个集成开发环境,例如MyEclipse8.6,并安装所需的Struts2.21、JUnit4.8.2以及...
以上是使用Struts1实现文件上传下载的基本流程和关键点。实际开发中,你可能还需要考虑其他因素,如用户界面的优化、错误处理、性能优化等,确保整个过程既安全又高效。在实际操作中,务必参照具体项目的配置和需求...
在Struts1中实现文件上传,我们需要考虑前端的HTML表单、ActionForm、Struts配置文件以及后台的Action处理。 首先,前端实现是通过一个支持多文件选择的HTML表单来完成的。表单需要设置`enctype="multipart/form-...
在这个“Struts2实现文件上传”的主题中,我们将深入探讨如何利用Struts2框架来实现在Web应用中的文件上传功能。 首先,我们注意到一个细节描述:“private String uploadContextType;应更正为private String ...
在本文中,我们将深入探讨使用Struts2实现文件上传和下载的各种方案。 ### 文件上传方案 #### 1. 使用Struts2进行文件普通上传 文件上传的核心是处理`multipart/form-data`类型的表单数据。Struts2通过`Struts2-...
在Struts1中,实现文件上传和下载功能是常见的需求,这对于处理用户提交的文件,如图片、文档等,至关重要。下面将详细解释如何在Struts1中实现这两个操作。 首先,我们关注文件上传。在Struts1中,文件上传主要...
要实现文件上传,你需要做以下几步: 1. **配置Struts1 ActionForm**:创建一个继承自Struts1的ActionForm类,添加一个类型为`java.io.File`的字段,用于接收上传的文件。例如,你可以创建一个名为`UploadForm`的类...
Struts1和Struts2是两个非常著名的Java Web框架,它们都提供了处理文件上传和下载的功能,但实现方式有所不同。本文将深入探讨这两个框架在文件操作方面的具体实现。 首先,让我们了解一下Struts1中的文件上传功能...
本实例主要探讨如何在Struts1中实现多文件上传功能,并结合Form中传递List类型的数据,这对于理解MVC模式下的文件处理和数据传递有重要作用。我们将深入讨论以下几个关键知识点: 1. **Struts1框架基础**: Struts...
1. **文件上传组件**:在Struts2中,我们通常使用`Commons FileUpload`库来处理文件上传。这个库提供了处理多部分HTTP请求的能力,是Java中处理文件上传的标准库。我们需要在Struts2配置文件中引入对应的拦截器`...
下面将详细阐述如何使用Struts2来实现文件上传功能。 1. **Struts2文件上传组件** Struts2框架集成了一个名为`struts2-convention-plugin`的插件,它提供了文件上传的支持。主要依赖于`Commons FileUpload`和`...
文件上传比较多,多文件上传少一点 文件下载很少的,看似简单,实则不然 网上的Struts2进行的文件下载一般都是单文件或者固定的文件,并没有(很少)实现随意文件的下载的例子 提供多文件上传,上传成功后,提供...
在Struts2中,文件上传主要依赖于`org.apache.struts2.components.FileUpload`组件,这个组件是基于Commons FileUpload库实现的,它能够处理multipart/form-data类型的HTTP请求,这是文件上传所必需的格式。...
1. **配置Struts2 Action**:在Struts2中,我们需要创建一个Action类来处理文件上传请求。这个类通常需要实现`ServletRequestAware`接口,以便可以直接访问HttpServletRequest对象,从中获取上传文件。 2. **添加...
下面将详细介绍如何使用Struts1实现文件上传和下载,以及涉及到的关键知识点。 **一、文件上传** 1. **表单配置**:在HTML表单中,我们需要使用`<input type="file">`标签让用户选择要上传的文件。同时,表单需要...