`

Struts2上传下载(使用Oracle数据库存储)

阅读更多

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>

 下载附件功能完成!!

2
1
分享到:
评论

相关推荐

    struts2上传图片到Oracle

    在"struts2上传图片到Oracle"这个场景中,我们将探讨如何使用Struts2框架实现文件上传,以及如何将这些上传的图片存储到Oracle数据库中。 首先,让我们了解文件上传的基本流程。在Struts2中,我们通常会创建一个...

    struts2+spring+ibatis+oracle+分页搜索+上传附件实例

    Struts2提供了文件上传的支持,用户可以通过表单提交文件,后端则利用iBatis将文件存入Oracle数据库。需要注意的是,文件存储策略应考虑到安全性、容量和性能,可能需要对文件进行转码、压缩或者存储到云服务。 综...

    市调管理系统struts2+hibernate+oracle

    系统利用了Struts2作为MVC框架,Hibernate作为对象关系映射(ORM)工具,以及Oracle数据库作为后端数据存储。 【Struts2】Struts2是Apache软件基金会的开源项目,它是一个用于构建企业级Web应用的MVC框架。Struts2...

    Struts2 Hibernate存取Oracle数据库中的BLOB数据.pdf

    在实际操作Oracle数据库存储BLOB数据时,可以通过Hibernate提供的API进行数据的增删改查。具体流程通常包括: 1. 配置Hibernate环境:通过配置文件定义数据库连接信息和映射信息。 2. 实现数据持久化类:创建与...

    struts2+spring+hibernate源码(oracle数据库)

    这个压缩包提供了一个使用SSH(Struts2、Spring、Hibernate)和Oracle数据库的示例项目,名为"Myssh2",对于初学者来说,这是一个很好的学习资源。 **Struts2** 是一个MVC(Model-View-Controller)框架,负责处理...

    s2si struts2+spring+ibats框架的留言本,oracle数据库

    【标题】"s2si struts2+spring+ibatis框架的留言本,oracle数据库"是一个基于Java技术的Web应用程序示例,它演示了如何整合Struts2、Spring和iBatis这三大流行框架来构建一个功能完善的系统。这个项目以留言本为应用...

    最好最全的Oracle 数据库教程(内含命令使用实例)

    Oracle数据库是全球广泛使用的大型关系型数据库管理系统,尤其在企业级应用中占据重要地位。它提供了丰富的功能,包括数据存储、事务处理、备份恢复、性能优化等。本教程被誉为最全面的Oracle学习资源,旨在帮助初学...

    Struts2连接oracle数据库增删改查实例的实现[方案].doc

    在上述文档中,我们关注的是如何利用Struts2框架与Oracle数据库进行交互,实现基本的数据操作:增(添加)、删(删除)、改(修改)和查(查询)。以下是对这个实例的详细解释: 1. **数据库连接**: 连接到Oracle...

    SSH3+Oracle数据库实现文件上传下载的项目

    在这个项目中,Struts2主要负责接收用户的文件上传请求,处理文件上传操作,同时它也负责处理文件下载请求,将文件内容发送回客户端。 3. **Hibernate框架**: Hibernate是一个对象关系映射(ORM)框架,使得...

    java struts2 + ibatis +oracle 整合简单登陆及增删改查实例

    1. **环境配置**:确保安装了JDK、Apache Tomcat服务器、Struts2、iBatis和Oracle数据库,并正确配置了环境变量。 2. **创建数据库表**:根据需求在Oracle中创建用户表,包括必要的字段如用户名、密码等。 3. **构建...

    struts文图片上传 并存入数据库 在jsp页面显示

    在这个特定的项目中,我们看到的是一个关于如何使用Struts实现图片上传、存储到数据库以及在JSP页面显示的过程。以下是相关的知识点详解: 1. **Struts框架**:Struts是Apache软件基金会的一个开源项目,它提供了...

    一个基于oracle 数据库的struts 的例子的源文件

    2. **Oracle数据库集成**:系统使用Oracle数据库存储房屋销售数据。在数据库设计中,可能包含了如房屋ID、地址、价格、面积等字段的表结构。通过JDBC(Java Database Connectivity)接口,应用程序能够执行SQL语句来...

    SSH框架实现增删改查,Oracle数据库

    本教程将详细介绍如何利用SSH框架结合Oracle数据库来实现基本的CRUD(Create、Read、Update、Delete)操作。 1. **Struts2**:作为MVC(Model-View-Controller)架构的一部分,Struts2负责处理用户请求,将这些请求...

    struts2简单登录注册(连接数据库)

    在"struts2简单登录注册(连接数据库)"这个项目中,开发者使用了Struts2框架来实现用户登录和注册的功能,并与Oracle数据库进行了交互。下面我们将详细探讨涉及的技术点。 1. **Struts2框架**: Struts2是Apache...

    【java】图书管理系统(struts+oracle)-包含数据库

    【java】图书管理系统(struts+oracle) 是一个基于Java技术构建的Web应用程序,它利用了Struts框架作为MVC(Model-View-Controller)设计模式的实现,以及Oracle数据库来存储和管理图书数据。这样的系统对于学习Java...

    Struts+jdbc+oracle完整项目

    通过学习这个项目,开发者可以深入理解Web应用的架构设计,掌握Struts的MVC模式,了解如何利用JDBC进行数据库操作,以及如何在实际项目中部署和配置Oracle数据库。同时,项目中的错误处理、事务管理、安全性考虑等...

    Struts2+Oracle增删查

    Oracle数据库的主要特点包括: 1. **高性能**:Oracle的并行处理和优化器技术使其在处理大量数据时表现出优秀的性能。 2. **安全性**:Oracle提供了多种安全机制,如用户权限管理、审计、加密等,确保数据的安全。...

    java 权限控制项目(j2ee:struts2+oracle)

    这个项目以Struts2作为MVC框架,结合Oracle数据库,构建了一个基础的权限管理系统。以下将详细解析项目中涉及的主要知识点: 1. **Struts2框架**: Struts2是Java Web开发中广泛使用的开源框架,它提供了强大的...

    Struts用JDBC的Blob字段保存和读取Oracle数据库

    本文将详细介绍如何使用Struts结合JDBC操作Oracle数据库中的Blob字段实现文件的保存和读取。 #### 代码分析 根据提供的部分代码示例,我们可以将其分为两个主要部分:文件保存和文件读取。 ##### 文件保存 文件...

Global site tag (gtag.js) - Google Analytics