`
duanfei
  • 浏览: 733730 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

关于JSP中的文件上传

    博客分类:
  • J2EE
阅读更多
最近因为项目需要,做了一个XLS文件上传.但不知道如何下手.就拿来别人的代码看了一下.如下:
首先,在application-data.xml中添加:
<bean id="attachmentDao" class="com.ibm.process.persistence.dao.ProcessAttachmentDAO">
		<property name="sessionFactory">
			<ref local="sessionFactory"/>
		</property>
	</bean>

这里用到了一个设计模式――工厂模式,用户程序从工厂类SessionFactory中取得Session的实例,可以用来刷新数据库.
SessionFactory在Hibernate中实际起到了一个缓冲区的作用,它缓冲了Hibernate自动生成的SQL语句和一些其它的映射数据,还缓冲了一些将来有可能重复利用的数据。

在com.ibm.process.persistence.dao.ProcessAttachmentDAO"中
/*
 * 创建日期: 2006-4-29
 * Version: 1.0
 */
package com.ibm.process.persistence.dao;

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.List;

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import com.ibm.process.persistence.pojo.ProcessAttachment;

/**
 * 
 * TJMCC EIP II Copyright:IBM BCS
 * 
 * @author fengfei
 * 
 */
public class ProcessAttachmentDAO extends HibernateDaoSupport {

//查询
public ProcessAttachment query(Integer fileId) {
		java.util.List list = this.getHibernateTemplate().find(
				"from ProcessAttachment a where a.fileId=?", fileId);
		if (list == null || list.size() == 0)
			return null;
		return (ProcessAttachment) list.get(0);
	}

//增加保存
	public void add(ProcessAttachment attachment) {
		this.getHibernateTemplate().save(attachment);
	}

	public void delete(ProcessAttachment attachment) {
		this.getHibernateTemplate().delete(attachment);
	}

//修改
	public void modify(ProcessAttachment attachment) {
		this.getHibernateTemplate().update(attachment);
	}

//查询多个
	public List queryAttachmentList(Integer processId) {
		List list = null;
		if (processId != null && !"".equals(processId)) {
			list = this.getHibernateTemplate()
					.find("from ProcessAttachment pc where pc.processId=?",
							processId);
		}
		if (list != null && list.size() > 0) {
			for (int i = 0; i < list.size(); i++) {
				ProcessAttachment temp = (ProcessAttachment) list.get(i);
				temp.setTempFileName(temp.getFileName().substring(14,
						temp.getFileName().length()));
			}

		}
		return list;
	}

	public List ListProcessAttachment(Integer processId) {
		List list = null;
		if (processId != null && !processId.equals("")) {
			list = this.getHibernateTemplate()
					.find("from ProcessAttachment pc where pc.processId=?",
							processId);
		}
		if (list != null && list.size() > 0) {
			for (int i = 0; i < list.size(); i++) {
				ProcessAttachment temp = (ProcessAttachment) list.get(i);
				temp.setTempFileName(temp.getFileName().substring(14,
						temp.getFileName().length()));

			}
		}
		return list;
	}

//删除
	public void removeByFormId(Integer processId) {
		List list = this.queryAttachmentList(processId);

		if (list != null) {
			for (int i = 0; i < list.size(); i++) {
				delete((ProcessAttachment) list.get(i));
			}
		}

	}

}



其次,在application-service.xml中添加:
<bean id="attachmentHandle" class="com.ibm.process.web.fileupload.ProcessAttachmentHandler">
		<property name="dao" ref="attachmentDao"/>
		<property name="upload" ref="upload"/>
	</bean>	


再次,把ProcessAttachmentHandler注入到Spring中让Action使用.
<bean name="/Apply" parent="actionTemplate">
 <property name="target">
  <bean class="Action">	
   <property name="handle" ref="attachmentHandle"/>
  </bean>
 </property>
</bean>


在Action中添加如下代码:
import com.ibm.process.web.fileupload.ProcessAttachmentHandler;

private ProcessAttachmentHandler handle;

	/**
	 * @return Returns the handle.
	 */
	public ProcessAttachmentHandler getHandle() {
		return handle;
	}

	/**
	 * @param handle
	 *            The handle to set.
	 */
	public void setHandle(ProcessAttachmentHandler handle) {
		this.handle = handle;
	}

try {
 //查找附件
 java.util.List attachments = handle.getDao().queryAttachmentList(Integer.valueOf(businessId));
 request.setAttribute("attachments", attachments);
  } 
catch (Exception e) {
  logger.error("get upload attachments error", e);
 throw e;}


在JSP中添加代码如下图所示:

<table width="100%" border="0">
      <tr>
        <td width="90%">
        	<table id="tblsales" width="100%" border="0" cellpadding="0" cellspacing="0">
        		<c:if test="${attachments!=null}">
        		<c:forEach items="${attachments}" var="attachment" varStatus="counter">
        		<tr><td></td></tr>
          		<tr>
            		<td id="span<c:out value='${counter.count-1}'/>" name="span<c:out value='${counter.count-1}'/>">
            		<table>
            		<tr>
            			<td width="88%">
            			<input type="file" name="uploadFile[<c:out value='${counter.count-1}'/>].file" value="" size="50"/><a href="<%= request.getContextPath()%>/downLoadFileAction.do?filename=<c:out value='${attachment.fileName}'/>"><c:out value="${attachment.tempFileName}"/></a>
            			<input type="hidden" name="uploadFile[<c:out value='${counter.count-1}'/>].fileId" value="${attachment.fileId}"/>
            			<input type="hidden" name="fileId" value="<c:out value='${attachment.fileId}'/>"/>
            			<input type="hidden" name="deleteFileId" value=""/>
            			</td>
            			<td width="2%"></td>
            			<td width="10%"><input type="button" name="DeleteFile"+"${counter.count-1}" value="删除" class="button_2" onClick="deleteAtt('<c:out value='${counter.count-1}'/>')"/></td>
            		</tr>
            		</table>
            		</td>
          		</tr>
          		</c:forEach>
          		</c:if>
          		<c:if test="${attachments==null}">
          		<tr>
            		<td id="span0" name="span0">
            		<table>
            			<tr>
            			<td width="88%">
            			<input type="file" name="uploadFile[0].file" value="" size="50"/>
            			<input type="hidden" name="uploadFile[0].fileId" value=""/>
            			<input type="hidden" name="fileId" value="">
            			<input type="hidden" name="deleteFileId" value=""/>
            			</td>
            			<td width="2%"></td>
            			<td width="10%"><input type="button" name="DeleteFile0" value="删除" class="button_2" onClick="deleteAtt(0)"/></td>
            			</tr>
            		</table>
            		</td>
          		</tr>
          		</c:if>
        	</table>
        </td>
       <td width="10%" valign="top" style="padding-top:2px">
        	<span style="padding-left:10px">
          		<input type="button" name="Submit4223" value="增加附件" class="button_4" onClick="addToTable()">
          		<input type="hidden" name="attsize" 
          		value="<c:if test='${attachments==null}'>1</c:if><c:if test='${attachments!=null}'><c:if test='${attsize!=null}'><c:out value='${attsize}'/></c:if><c:if test='${attsize==null}'>0</c:if></c:if>"/>
        	</span>
        </td>
      </tr>
 </table>


<!-- 添加附件与删除附件的方法 -->
<script language="javascript" type="">

function addToTable(){
	var the_table = document.all("tblsales");
	var attsizeObj = document.all("attsize");
	trId = attsizeObj.value;

	var the_row,the_cell;
	the_row = -1;
	var newrow=the_table.insertRow(the_row);
	newrow.insertCell();
	newrow.cells(0).id="span"+trId;
	newrow.cells(0).name="span"+trId;
	tmpHTML = "<table><tr><td width='88%'>";
	tmpHTML = tmpHTML+"<input type='file' name='uploadFile["+trId+"].file' value='' size='50'>" + "<input type='hidden' name='uploadFile["+trId+"].fileId' value=''>" + "<input type='hidden' name='fileId' value=''>" + "<input type='hidden' name='deleteFileId' value=''>";
	tmpHTML = tmpHTML+"</td>";
	tmpHTML = tmpHTML+"<td width='2%'></td>";
	tmpHTML = tmpHTML+"<td width='10%'><input type='button' name='DeleteFile"+trId+"' value='删除' class='button_2' onClick='deleteAtt("+trId+")'/></td>";
	tmpHTML = tmpHTML+"</tr></table>";
	newrow.cells(0).innerHTML=tmpHTML;
 	trId++;	
	
	attsizeObj.value=trId;
}

function deleteAtt(attid){
	var att=document.getElementById("span"+attid);
	att.style.display="none";
	var arraydelete=document.all("deleteFileId");
	if(arraydelete!=null)
	{
		if(attid==0)
		{
			if(arraydelete[0]==null)
			{
				if(arraydelete!=null)
				{
					arraydelete.value="y";
				}
			}
			if(arraydelete[0]!=null)
			{
				arraydelete[attid].value="y";
			}
		}
		else
		{
			arraydelete[attid].value="y";
		}
	}
}
</script>


在另一个Action中保存附件.
private ProcessAttachmentHandler handle;
	/**
	 * @return Returns the handle.
	 */
	public ProcessAttachmentHandler getHandle() {
		return handle;
	}
	/**
	 * @param handle The handle to set.
	 */
	public void setHandle(ProcessAttachmentHandler handle) {
		this.handle = handle;
	}

String templateName = "SPContractProcess";
int val = (int) apply.getId().longValue();
		Integer processId = null;
		if (val < 0) {
			val = -val;
		}
String[] fileId = applyForm.getFileId();
		String[] deleteFileId = applyForm.getDeleteFileId();
		processId = Integer.valueOf("" + val);
try {
			ProcessAttachment processAttachment = new ProcessAttachment();
			processAttachment.setFileUser(user.getUserName());
			processAttachment.setTemplateName(templateName);
			processAttachment.setProcessId(processId);
			handle.modifyAttachment(applyForm, processAttachment, fileId,
					deleteFileId);
		} catch (Exception e) {
		//	logger.error("upload files error", e);

			throw e;
		}


在approval中只显示出附件的做法:
如图所示:

<!-- 附件添加删除部分的代码 -->
  <tr>
    <td class="table_color_1"></td>
    <td height="25" class="lshowtd">附件:</td>
    <td colspan="5" class="l_line">
    <table width="100%" border="0">
    	<tr>
				<td width="82%" valign="top">
        	<table width="100%" border="0" cellpadding="0" cellspacing="0" id="tblsales">
        		<c:if test="${attachments!=null}">
        			<c:forEach items="${attachments}" var="attachment" varStatus="counter">
          			<tr>
            			<td><a href="<%= request.getContextPath()%>/downLoadFileAction.do?filename=<c:out value='${attachment.fileName}'/>"><c:out value="${attachment.tempFileName}"/></a></td>
          			</tr>
          		</c:forEach>
          	</c:if>
          	<c:if test="${attachments==null}">
          		<tr>
            		<td>&nbsp;</td>
          		</tr>
          	</c:if>
        	</table>
        </td>
      </tr>
    </table>    
    </td>
  </tr>


在点击xls时,执行了downLoadFileAction.do的动作.分别在Struts与Spring中配置如下:
struts-application.xml
<action path="/downLoadFileAction">
</action>

application-servlet.xml
<bean name="/downLoadFileAction" class="com.ibm.process.struts.action.DownLoadFileAction">
		<property name="fileURL" value="${fileURL}"/>
	</bean>


在DownLoadFileAction中代码如下:
public class DownLoadFileAction extends BaseAction {
	private String fileURL;

	public String getFileURL() {
		return fileURL;
	}

	public void setFileURL(String fileURL) {
		this.fileURL = fileURL;
	}

	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		ActionForward temp = null;
		String filename = request.getParameter("filename");
		String filetemp = request.getParameter("filename");
		if (filetemp != null && !"".equals(filetemp) && filetemp.length() >= 14) {
			filetemp = filetemp.substring(14, filetemp.length());
		}
		// filetemp = new String(filename.getBytes("UTF-8"), "ISO-8859-1");
		// filename = new String(filename.getBytes("GBK"), "ISO-8859-1");
		// filename = new String(filename.getBytes("GB2312"), "ISO-8859-1");

		// filename = new String(filename.getBytes("ISO8859-1"), "UTF-8");
		// filename = new String(filename.getBytes("ISO8859-1"), "GBK");
		// filename = new String(filename.getBytes("ISO8859-1"), "GB2312");

		// filename = URLEncoder.encode(filename, "ISO8859-1");
		filetemp = URLEncoder.encode(filetemp, "UTF-8");
		// filename = URLEncoder.encode(filename, "GB2312");

		// filename = URLEncoder.encode(filename, "GBK");

		// filename = new String(filename.getBytes("ISO8859-1"), "UTF-8");
		// filename=URLEncoder.encode(filename,"GBK");
		// filename=new String(filename.getBytes("GBK"), "ISO-8859-1");
		response.setContentType("application/octet-stream");
		// response.setContentType("application/octet-stream; charset=UTF-8");

		response.setHeader("Content-disposition", "attachment; filename="
				+ filetemp);
		BufferedInputStream bis = null;
		BufferedOutputStream bos = null;

		try {
			// EIPLogger.debug("FileName:"+fileURL+filename);
			// fileURL="/portal/";
			File file = new File(fileURL + filename);
			bis = new BufferedInputStream(new FileInputStream(file));
			bos = new BufferedOutputStream(response.getOutputStream());
			bos.flush();
			byte[] buff = new byte[12048];
			int bytesRead;
			while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
				bos.write(buff, 0, bytesRead);
			}
		} catch (final IOException e) {
			System.out.println("File Download IOException.\n" + e);
		} catch (Exception e) {
			e.printStackTrace();

		} finally {
			if (bis != null)
				bis.close();
			if (bos != null)
				bos.close();
		}
		return null;

	}

}
0
1
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    JSP多文件上传(同时上传)

    在多文件上传中,JSP页面会提交表单到一个Servlet,Servlet负责接收文件并进行处理。 3. **Multipart解析器**: 文件上传涉及到二进制数据,不能直接通过HTTP的普通请求来发送。因此,我们需要使用Multipart解析器...

    JSP实现文件上传与下载.pdf

    "JSP实现文件上传与下载" JSP(Java Server Pages)是一种动态网页技术,用于开发基于Web的应用程序。...JSP文件上传和下载是Web应用程序中常用的功能,需要注意文件上传和下载的安全性、性能和可扩展性。

    基于jsp的文件上传下载

    "基于jsp的文件上传下载"是Web应用程序中的常见需求,涉及到客户端与服务器之间的数据交互。本项目详细阐述了如何利用JSP实现文件的上传和下载功能。 首先,文件上传涉及的主要技术有HTML表单、Servlet和多部分请求...

    jsp文件的上传和下载

    本项目专注于解决在JSP中实现文件上传和下载时遇到的一些常见问题,特别是针对中文文件名的处理。下面我们将深入探讨这个主题。 首先,文件上传通常涉及到HTTP协议中的multipart/form-data类型表单。在JSP中,我们...

    利用jsp实现文件上传下载

    在本文中,我们将学习如何使用 JSP 实现文件上传和下载功能。在这个过程中,我们将使用 Apache 的 Commons FileUpload 和 Commons IO 两个库来处理文件上传和下载。 首先,让我们了解一下文件上传和下载的基本概念...

    jsp 实现文件上传

    在上面的代码中,我们可以看到一个简单的 JSP 文件上传实例。首先,在 index.html 文件中,我们使用了 HTML 表单来上传文件,并将其提交到 do_upload.jsp 文件中。 在 do_upload.jsp 文件中,我们使用了 Java 语言...

    jsp自行增加上传文件的批量文件上传

    自己给修改了一下,做出了一个jsp版的多文件上传功能,客户需要进行多个文件上传:本程序就两个jsp文件,jar包自行下载,tepl.jsp运行后: 点击【增加】后,系统将增加一行上传文件的选择 点击【删除】后,系统...

    jsp文件上传类 jsp文件上传类

    以上是关于JSP文件上传的基本概念和实现步骤。在实际开发中,应结合具体需求,如文件存储策略、权限控制等,进行更深入的设计和实现。同时,随着技术的发展,现代Web框架如Spring Boot提供了更高级别的抽象,简化了...

    jsp多文件上传

    本示例主要关注"jsp多文件上传",结合了jQuery和plupload库来实现这一功能。以下是对这些知识点的详细解释: 1. **JSP(JavaServer Pages)**:JSP是Java的一种动态网页技术,它允许开发人员在HTML代码中嵌入Java...

    JSP同时选择多文件上传MultifileUploadDemo

    在多文件上传的场景中,JSP主要负责接收和处理来自客户端的文件上传请求。 在"MultifileUploadDemo"中,我们利用了Flash作为前端的上传组件。Flash因其支持多媒体和交互性而被广泛用于创建丰富的互联网应用程序。在...

    JSP无组件文件上传

    在网络上找到的,纯JSP实现的文件上传程序,支持多文件的上传,例子是多文件的上传,稍微修改就可以变成单文件的上传或者更多文件的上传,控制成需要扩展名的文件上传,指定大小的文件上传等。程序目前上传文件存储...

    JSP文件上传 支持进度条显示.rar

    "JSP文件上传 支持进度条显示"这个项目是针对JSP环境设计的一个AJAX Web上传程序,它允许用户上传大文件(如单个文件100M),并具有文件上传进度条的可视化功能。以下将详细解析这个项目的知识点: 1. **JSP(Java...

    免费的 JSP多文件上传的组件.ZIP_JSP上传_jsp_jsp 上传_jsp多文件上传_jsp文件上传

    标签进一步强调了关键词“jsp上传”、“jsp多文件上传”和“jsp文件上传”,这些都与文件上传的特定场景有关。在JSP中处理多文件上传意味着组件需要能够处理一个请求中包含的多个文件,并且可能支持并发上传,以提高...

    js jsp 文件上传

    通过这个项目,我们可以深入理解JS和JSP在文件上传过程中的角色和交互。 **前端部分 - JavaScript** 1. **HTML表单设计**:文件上传通常基于`&lt;input type="file"&gt;`元素。在HTML中创建一个表单,包含此元素,用户...

    JSP文件上传代码文件上传代码

    在JSP中实现文件上传是一项常见的任务,尤其是在构建Web应用程序时。JSP(JavaServer Pages)是一种基于Java的服务器端脚本语言,用于生成动态网页内容。以下将详细讲解如何在JSP中实现文件上传,并解决如何去除表单...

    JSP实现 文件上传

    文件上传是Web应用中常见的功能,比如用户上传头像、提交文档等。本教程将详细介绍如何使用JSP来实现文件上传的功能。 一、理解文件上传原理 文件上传是通过HTTP协议的POST请求实现的。客户端(浏览器)使用表单中...

    jspsmart 文件上传

    这个组件允许开发者在JSP或Servlet中方便地实现文件上传功能,支持断点续传、多文件同时上传以及文件大小限制等特性。 在使用jspsmart时,你需要了解以下几个关键知识点: 1. **文件上传原理**:文件上传通常涉及...

    jsp实现文件上传下载

    在Web开发中,文件上传和下载是常见的功能需求,尤其是在企业级应用和社交网络平台中。本文将深入探讨如何使用Java和JSP(JavaServer Pages)技术实现文件的上传与下载功能。 首先,我们需要理解JSP的基础。JSP是一...

    Jsp上传文件所需jar包

    总的来说,理解并掌握JSP文件上传所需的jar包以及如何使用它们是Java Web开发中的一个重要技能。正确配置和使用这些库可以让你的文件上传功能更加健壮、安全和高效。在实践中,还需要注意处理可能出现的异常,如文件...

    关于JSP文件上传下载源代码

    这个项目标题“关于JSP文件上传下载源代码”表明我们将讨论如何在JSP环境中实现文件上传和下载的功能。 首先,我们需要理解JSP文件上传的基本流程。通常,文件上传是通过HTML表单完成的,表单中包含一个`...

Global site tag (gtag.js) - Google Analytics