Struts2上传下载(使用Oracle数据库存储)
1.文件上传的实现(多个附件)
本例以上传多个附件为例,实现Struts2保存Oracle Blob字段的上传功能
需要前台传到后台的参数如下:
(1).用户上传的所有附件列表:private List<File> attachments;
(2).用户上传的所有附件名,用逗号分隔,例如:附件1,附件2,附件3
private String attachmentFileName;
(3).getter/setter方法省略
(4).上传附件的具体实现
Action代码:
if(attachmentFileName!=null){ //分割附件名 String name[] = attachmentFileName.split(", "); int i = 0; for(File f : attachment){ //循环获得输入流 InputStream in = new FileInputStream(f); //调用Service上传的方法 this.checkWorkService.uploadAttach(in, name[i++].trim()); in.close(); } }
Service代码:
public CheckWorkRecordAttach uploadAttach(InputStream inputStream, String attachmentName) throws Exception { //输出流 ByteArrayOutputStream bytestream = new ByteArrayOutputStream(); int ch; byte[] buffer = new byte[1024]; //编码转换,后经测试发现无用 // String str = new String(buffer,"utf-8"); // String str2 = new String(str.getBytes("iso-8859-1"),"utf-8"); // byte buffers[] = str2.getBytes(); while ((ch = inputStream.read(buffer)) > 0) { bytestream.write(buffer, 0, ch); } // 将输入流写成BYTE数组 byte[] data = bytestream.toByteArray(); bytestream.close(); // 将BYTE数组变成BLOB对象 Blob attachmentCont = Hibernate.createBlob(data); //保存到数据库 CheckWorkRecordAttach attach = new CheckWorkRecordAttach(); attach.setAttachmentName(attachmentName); attach.setAttachmentUuid(uuid); attach.setUploadTime(new Date()); attach.setState(0); attach.setAttachmentCont(attachmentCont); attach = this.getCheckWorkRecordAttachDao().save(attach); return attach; }
文件上传完成!!
2.文件下载的实现(修复附件中文名乱码)
需要前台传到后台的参数如下:
(1).附件名:private String attachmentFileName;
(2).附件ID:private String attachId;
(3).getter/setter方法省略
/*附件下载*/ /*前台代码*/ function download(id,fileName){ window.location.href = "../downloadAttach/assignWork_downLoad?attachmentFileName="+fileName+"&&attachId="+id; }
(4).下载附件的后台代码实现
//附件名的getter,setter方法,防止中文名乱码 public String getAttachmentFileName() { return this.attachmentFileName; } public void setAttachmentFileName(String attachmentFileName) { try { this.attachmentFileName = new String(attachmentFileName.getBytes("ISO-8859-1"), "utf-8"); } catch (UnsupportedEncodingException e) { logger.error("附件名转换失败", e); this.attachmentFileName = "未知"; }; }
Action代码(需要返回InputStream):
/** * 附件下载 * @return */ public String downLoad(){ try { //防止中文附件名乱码 ServletActionContext.getResponse().setHeader("Content-Disposition", "attachment;fileName=" + java.net.URLEncoder.encode(this.attachmentFileName,"UTF-8")); inputStream = this.assignWorkService.downLoad(Integer.parseInt(attachId)); return SUCCESS; } catch (Exception e) { e.printStackTrace(); return ERROR; } }
Service代码(返回InputStream):
/** * 附件下载 */ @Transactional public InputStream downLoad(int attachId) throws Exception { //根据ID获取附件 PersonalWorkReportAttach personalWorkReportAttach = this.personalWorkReportAttachDao.get(attachId); //附件内容 Blob blob = personalWorkReportAttach.getAttachmentCont(); //获得InputStream InputStream inputStream = blob.getBinaryStream(); byte[] buffer = new byte[1024]; int ch; //OutPotStream ByteArrayOutputStream out= new ByteArrayOutputStream(); //下面将BLOB数据写入文件 String str = new String(buffer,"iso-8859-1"); String str2 = new String(str.getBytes("utf-8"),"iso-8859-1"); byte buffers[] = str2.getBytes(); while((ch = inputStream.read(buffer))>0){ out.write(buffers,0,ch); } //依次关闭 out.close(); inputStream.close(); return new ByteArrayInputStream(out.toByteArray()); }
Struts.xml的配置
<!-- 附件下载 --> <package name="downloadAttach" namespace="/downloadAttach" extends="struts-default"> <action name="assignWork_*" class="AssignWorkAction" method="{1}"> <result name="success" type="stream"> <param name="inputName">inputStream</param> <param name="contentDisposition">attachment;filename="${attachmentFileName}"</param> <param name="bufferSize">4096</param> </result> </action> </package>
下载附件功能完成!!
相关推荐
在"struts2上传图片到Oracle"这个场景中,我们将探讨如何使用Struts2框架实现文件上传,以及如何将这些上传的图片存储到Oracle数据库中。 首先,让我们了解文件上传的基本流程。在Struts2中,我们通常会创建一个...
Struts2提供了文件上传的支持,用户可以通过表单提交文件,后端则利用iBatis将文件存入Oracle数据库。需要注意的是,文件存储策略应考虑到安全性、容量和性能,可能需要对文件进行转码、压缩或者存储到云服务。 综...
系统利用了Struts2作为MVC框架,Hibernate作为对象关系映射(ORM)工具,以及Oracle数据库作为后端数据存储。 【Struts2】Struts2是Apache软件基金会的开源项目,它是一个用于构建企业级Web应用的MVC框架。Struts2...
在实际操作Oracle数据库存储BLOB数据时,可以通过Hibernate提供的API进行数据的增删改查。具体流程通常包括: 1. 配置Hibernate环境:通过配置文件定义数据库连接信息和映射信息。 2. 实现数据持久化类:创建与...
这个压缩包提供了一个使用SSH(Struts2、Spring、Hibernate)和Oracle数据库的示例项目,名为"Myssh2",对于初学者来说,这是一个很好的学习资源。 **Struts2** 是一个MVC(Model-View-Controller)框架,负责处理...
【标题】"s2si struts2+spring+ibatis框架的留言本,oracle数据库"是一个基于Java技术的Web应用程序示例,它演示了如何整合Struts2、Spring和iBatis这三大流行框架来构建一个功能完善的系统。这个项目以留言本为应用...
Oracle数据库是全球广泛使用的大型关系型数据库管理系统,尤其在企业级应用中占据重要地位。它提供了丰富的功能,包括数据存储、事务处理、备份恢复、性能优化等。本教程被誉为最全面的Oracle学习资源,旨在帮助初学...
在上述文档中,我们关注的是如何利用Struts2框架与Oracle数据库进行交互,实现基本的数据操作:增(添加)、删(删除)、改(修改)和查(查询)。以下是对这个实例的详细解释: 1. **数据库连接**: 连接到Oracle...
在这个项目中,Struts2主要负责接收用户的文件上传请求,处理文件上传操作,同时它也负责处理文件下载请求,将文件内容发送回客户端。 3. **Hibernate框架**: Hibernate是一个对象关系映射(ORM)框架,使得...
1. **环境配置**:确保安装了JDK、Apache Tomcat服务器、Struts2、iBatis和Oracle数据库,并正确配置了环境变量。 2. **创建数据库表**:根据需求在Oracle中创建用户表,包括必要的字段如用户名、密码等。 3. **构建...
在这个特定的项目中,我们看到的是一个关于如何使用Struts实现图片上传、存储到数据库以及在JSP页面显示的过程。以下是相关的知识点详解: 1. **Struts框架**:Struts是Apache软件基金会的一个开源项目,它提供了...
2. **Oracle数据库集成**:系统使用Oracle数据库存储房屋销售数据。在数据库设计中,可能包含了如房屋ID、地址、价格、面积等字段的表结构。通过JDBC(Java Database Connectivity)接口,应用程序能够执行SQL语句来...
本教程将详细介绍如何利用SSH框架结合Oracle数据库来实现基本的CRUD(Create、Read、Update、Delete)操作。 1. **Struts2**:作为MVC(Model-View-Controller)架构的一部分,Struts2负责处理用户请求,将这些请求...
在"struts2简单登录注册(连接数据库)"这个项目中,开发者使用了Struts2框架来实现用户登录和注册的功能,并与Oracle数据库进行了交互。下面我们将详细探讨涉及的技术点。 1. **Struts2框架**: Struts2是Apache...
【java】图书管理系统(struts+oracle) 是一个基于Java技术构建的Web应用程序,它利用了Struts框架作为MVC(Model-View-Controller)设计模式的实现,以及Oracle数据库来存储和管理图书数据。这样的系统对于学习Java...
通过学习这个项目,开发者可以深入理解Web应用的架构设计,掌握Struts的MVC模式,了解如何利用JDBC进行数据库操作,以及如何在实际项目中部署和配置Oracle数据库。同时,项目中的错误处理、事务管理、安全性考虑等...
Oracle数据库的主要特点包括: 1. **高性能**:Oracle的并行处理和优化器技术使其在处理大量数据时表现出优秀的性能。 2. **安全性**:Oracle提供了多种安全机制,如用户权限管理、审计、加密等,确保数据的安全。...
这个项目以Struts2作为MVC框架,结合Oracle数据库,构建了一个基础的权限管理系统。以下将详细解析项目中涉及的主要知识点: 1. **Struts2框架**: Struts2是Java Web开发中广泛使用的开源框架,它提供了强大的...
本文将详细介绍如何使用Struts结合JDBC操作Oracle数据库中的Blob字段实现文件的保存和读取。 #### 代码分析 根据提供的部分代码示例,我们可以将其分为两个主要部分:文件保存和文件读取。 ##### 文件保存 文件...