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>
下载附件功能完成!!
相关推荐
Struts用 JDBC Blob字段 保存和读取 Oracle 数据库 好用 试过 有详细注释
130222.rar文件是一个精心打包的计算机专业JSP源码资料包,它集成了当前流行的Web开发框架:Struts, Spring, Hibernate以及Oracle数据库。此项目资料包为开发者提供了一个全面的、可立即部署的开发环境,旨在帮助...
Oracle作为关系型数据库,存储了车辆管理系统所需的各种数据。这个车辆管理系统实现了车辆信息的录入、查询、修改和删除等功能,方便了车辆管理人员对车辆信息的管理。同时,系统还提供了权限管理功能,确保了数据的...
环境为java,struts2,extjs3.0 js中除了现在用的textfield控件外,还有uploadfild可以支持extjs中文件的上传,但值得注意的是,form里的fileUpload属性必须为true, 前者支持IE和火狐 后者IE可以正常取得控件,而...
此压缩包中完全能实现的功能是在extjs中让本地照片预览,并且将地址传递给java后台,将图片文件以blob的形式存储到oracle数据库,并且可以默认将数据库中的数据第一次加载在预览框里(也就是从数据库中读出blob数据...
jstl标准函数 mysql命令详解 javascript 常用JavaScript代码 java位运算大全 java struts2 0经典知识点 ORACLE 经验 Oracle内置SQL函数 分类整理大全 高性能高并发服务器架构 数据库设计技巧 详细解释的 Java面试题 ...
数据库:oracle 集成开发工具:eclipse 土地档案系统作为将传统的纸质化档案管理方式进行数字化电子化的一项工程,将人类历史上的传承千年的档案管理工作进行数字化的封装,将土地档案管理工作进行了优化,在档案的...
数据库:选择关系型数据库,如MySQL、Oracle等,用于存储医院管理系统的数据。 在搭建环境时,需要安装Java JDK、Eclipse或IntelliJ IDEA等Java集成开发环境,并配置好服务器环境,如Tomcat。 2. 数据库设计 根据...
数据库:oracle 集成开发工具:eclipse 土地档案系统作为将传统的纸质化档案管理方式进行数字化电子化的一项工程,将人类历史上的传承千年的档案管理工作进行数字化的封装,将土地档案管理工作进行了优化,在档案的...
数据库:选择关系型数据库,如MySQL、Oracle等,用于存储药店药品销售管理系统的数据。 在搭建环境时,需要安装Java JDK、Eclipse或IntelliJ IDEA等Java集成开发环境,并配置好服务器环境,如Tomcat。 2. 数据库...
图书网站源码:1.使用oracle数据库实现数据的存储;2.通过java语言和Struts2 +mybatis框架来实现本系统的业务功能;3.开发工具使用的是MyEclipse2014完成整个系统的开发;4.相信这个网站很实用,可以参考。
3在Spring中使用org.springframework.jdbc.support.lob.OracleLobHandler处理Oracle数据库的Blob类型字段。 通过这样的设置和配置,我们就可以象持久化表的一般字段类型一样处理Blob字段了。 以上是Spring+...
数据库:选择关系型数据库,如MySQL、Oracle等,用于存储药店药品销售管理系统的数据。 在搭建环境时,需要安装Java JDK、Eclipse或IntelliJ IDEA等Java集成开发环境,并配置好服务器环境,如Tomcat。 2. 数据库...
期末大作业公交路线查询系统,oracle,存储过程,触发器 struts2,hibernate,sh框架
目前该版本可以支持mysql,oracle数据库,生成的代码包含bean文件Service文件还有jsp文件 template文件夹里面有四个模版文件(可以修改生成你想要的代码)。 具体配置步骤如下: 一、配置数据库基本信息,如...
列出数据库,MySQL,Oracle和Sybase的表和视图。 从Excel 97-2003文件加载数据,将数据从表导出到Excel 97-2003文件。 从表生成存储过程以进行插入,更新,删除,查询和分页。 从表中生成代码JSF2.0(Action)和...
教务管理系统网站,运用java web 技术进行编写,运用oracle数据库进行数据存储。
附有面试讲解视频,不是网盘,下载既有视频,屡试不爽的面试宝典。 Java面试题01.面试的整体流程 Java面试题02.java的垮平台原理 Java面试题03.搭建一个java的开发环境 Java面试题04.java中int占几个字节 Java面试题...
MySQL 是一款广受欢迎的开源关系型数据库管理系统(RDBMS),由瑞典MySQL AB公司开发,现隶属于美国甲骨文公司(Oracle)。自1998年首次发布以来,MySQL以其卓越的性能、可靠性和可扩展性,成为全球范围内Web应用...