`

struts2 多个文件上传 , jquery 的用法

阅读更多

  

jsp 页面 

<table id="table2" width="100%" border="1" cellspacing="0"
				cellpadding="0">
				<tr class="center">
					<th nowrap="nowrap" class="center" width="10%">
						操作
					</th>
					<th nowrap="nowrap" class="center">
						文件名
					</th>
				</tr>
				<tr id="file">
					<td colspan="6" align="left">						
						<input type="button" value="删&nbsp;&nbsp;除" id="deleteFile1"
								disabled="disabled" onclick="deleteFile()"
								style="text-align: center;">
						&nbsp;&nbsp;&nbsp;&nbsp;						
							<input type="button" value="添&nbsp;&nbsp;加" id="addFile1"
								disabled="disabled" onclick="addFile()"
								style="text-align: center;">						
					</td>
				</tr>
				<s:iterator value="pxjgfjVOList" id="result" status="status">
					<tr>
						<td>
							<input type="checkbox" name="choiceFile"
								value="<s:property value='cy_lsh'/>">
						</td>

						<td align="center">
							<s:property value='cy_wjmc' />
						</td>
					</tr>
				</s:iterator>

				<tr id="fileOne">
					<td>
						<input type="checkbox" name="choiceFile">
					</td>
					<td align="center">
						<s:file name="file" theme="simple" label="选择上传的文件"
							cssStyle="width:70%" />
						<font color="red">*</font>
					</td>
				</tr>
			</table>

 

javascript : 

var $tr3;
$(document).ready(function() {
	$tr2 = $("#fileOne").remove();

});

function addFile() {
	$tr2.clone().appendTo("#table2");
}

//删除选中的File
function deleteFile() {
	var choiceFiles = "";
	$('input[name="choiceFile"]').each(function() {
		if ($(this).attr("checked")) {
			if (this.value != "") {
				choiceFiles += this.value + ",";
			}
			$(this.parentNode.parentNode).remove(); // 删除当前节点的父节点的父节点
		}
	});

	$.ajax( {
		url : "file!deleteFile.action?lshs=" + choiceFiles,
		cache : false,
		success : function() {
		}
	});
}



function toSaveFile() {

		document.forms[1].action = "<%=path%>/cypxjg/sl!toSaveFile.action";
	document.forms[1].submit();
}

  

struts.xml配置文件:  

<package name="file" extends="struts-default,json-default"
		namespace="/file">

				<action name="file"
			class="FileGzdAction" >
			<result name="gzd">/file.jsp</result>
			<result name="deleteOK" type="json">
				<param name="root">messageType</param>
			</result>
			<result name="getPO" type="json">
				<param name="root">filePO</param>
			</result>
			<result name="fileDown" type="stream">
				<param name="contentType">application/octet-stream</param>
				<param name="contentDisposition">
					attachment;filename="${downloadFileName}" 
            	</param>
				<param name="inputName">inputStream</param> 
            	<param name="bufferSize">4096</param>            	
			</result>
		</action>

  

Action

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class FileAction extends TaskGuideBaseAction {

	private static final long serialVersionUID = 1L;
	private List<File> file = new ArrayList<File>();
	private List<String> fileFileName;
	private String fileName;
	private List<String> fileContentType;	
	/**
	 * saveFile 
	 * @throws XException
	 */
	public String toSaveFile() throws XException {
		User user = WebRBACRequestContext.getRBACRequestContext(
				ServletActionContext.getRequest()).getRequestUser();

		TransactionManager.beginTransaction();
		try {			
			// add 上传文件
			for (int i = 0; i < file.size(); i++) {
				PxjgfjPO pxjgfjPO = new PxjgfjPO();
				pxjgfjPO.setCy_wjmc(fileFileName.get(i));
				pxjgfjPO.setCy_wjlx(fileContentType.get(i));
				InputStream in = new BufferedInputStream(new FileInputStream(
						file.get(i)), BUFFER_SIZE);
				pxjgfjPO.setCy_wjnr(in);
				bo.add(filevo);
			}

			TransactionManager.commitTransaction();
		} catch (Exception e) {
			TransactionManager.rollbackTransaction();
			this.setMessage("保存失败!", ErrorLevel.ERROR);
			e.printStackTrace();
		}
		return "gzd";
	}
	
	/**
	 * Ajax 删除上传文件
	 * @return
	 */
	public String deleteFile() {
		String[] lshArray = lshs.split(",");
		for (int i = 0; i < lshArray.length; i++) {	
			try {
				FileFactory.getFileFactory().remove(lshArray[i]);
			} catch (DataAccessException e) {
				e.printStackTrace();
			} catch (ObjectNotExistException e) {
				e.printStackTrace();
			}
		}
		messageType = Constants.SUCCESS;
		return "deleteOK";
	}	
	
	/**
	 *  下载文件
	 * @return
	 */
	public String showFile() {
		getInputStream();
		return null;
	}

	// 如果下载文件名为中文,进行字符编码转换
	public String getDownloadFileName() {
		String downFileName = fileName;
		try {
			downFileName = new String(downFileName.getBytes(), "ISO8859-1");
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		return downFileName;
	}

	// 从下载文件原始存放路径读取得到文件输出流
	public void getInputStream() {
		FilePO filePO = null;
		InputStream inputStream = null;
		try {
			HttpServletResponse response = ServletActionContext.getResponse();
			OutputStream out = response.getOutputStream();
			filePO = (FilePO) FileFactory.getFileFactory().get(lsh);
			fileName = filePO.getCy_fsclmc();
			response.setContentType(filePO.getCy_wjlx());//文件内容
			((HttpServletResponse) response).setHeader("Content-Disposition",
					"attachment; filename=\"" + Utf8Util.toUtf8String(fileName)
							+ "\"");
			out.write(PxjgfjPO0.getB());//字节	
			// 关闭输出流
			if (null != out) {
				out.flush();
				out.close();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}
   

Dao:

public void add(POvo PO)
		throws DataAccessException, ObjectAlreadyExistException {
		
		PxjgfjPO po = (PxjgfjPO) pxjgfjPO;
		JDBCDataSource dataSource = getJDBCDataSource();
		PreparedStatement preparedStatement = null;
		try {
			logger.debug("执行SQL:" + PREPARED_INSERTSQL);

			preparedStatement =
				dataSource.getConnection().prepareStatement(PREPARED_INSERTSQL);

			preparedStatement.setString(1, po.getCy_lsh());
			preparedStatement.setString(2, po.getCy_wjlx());			
			preparedStatement.setBinaryStream(3, po.getCy_wjnr(),po.getCy_wjnr().available());
		
			preparedStatement.executeUpdate();
		} catch (SQLException e) {
			throw new DataAccessException(e);
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (preparedStatement != null) {
				try {
					preparedStatement.close();
				} catch (SQLException e1) {
					e1.printStackTrace();
				}
			}
		}
	}

public Object build(ResultSet resultSet) throws DataAccessException {
		PxjgfjPO pxjgfjPO = new PxjgfjPO();
		try{
			
				pxjgfjPO.setCy_wjnr(resultSet.getBinaryStream("CY_WJNR"));
				//用字节B来代替
				pxjgfjPO.setB(resultSet.getBytes("CY_WJNR"));	
		
		} catch (SQLException e) {
			throw new DataAccessException(e);
		}
		return pxjgfjPO;
	}
	

   

vo:

public class FilePO implements  Serializable {

	public final static String TABLE_NAME = "pxjg_fj";

                private byte[]  B;
	private String lsh;
	
	private String wjlx;
	/** 文件内容: 0-当前照片
1-历史照片
 */
	private InputStream wjnr;
	public String getLsh(){
		return this.lsh;
	}
	public void setLsh(String lsh){
		this.lsh =lsh;
	}	
	public String getWjlx(){
		return this.wjlx;
	}
	
	public void setWjlx(String wjlx){
		this.wjlx =wjlx;
	}
	public InputStream getWjnr(){
		return this.cy_wjnr;
	}	
	public void setWjnr(InputStream wjnr){
		this.wjnr = wjnr;
	}

	public byte[] getB() {
		return b;
	}

	public void setB(byte[] b) {
		this.b = b;
	}

}

 

 

分享到:
评论

相关推荐

    struts2+jquery多文件上传显示进度条,可直接运行(非常强大)

    Struts2和jQuery结合实现的多文件上传功能是一种常见的Web开发技术,特别是在处理大量数据时,用户需要上传多个文件的情况。这个项目的核心是利用Struts2的Action支持和jQuery的AJAX功能,以及一个用于展示进度条的...

    JQuery_uploadify_struts2_jsp__ajax多文件上传

    标题中的"JQuery_uploadify_struts2_jsp__ajax多文件上传"涉及到的是一个使用jQuery、uploadify插件、Struts2和JSP技术实现的AJAX多文件上传功能。这个功能允许用户在不刷新页面的情况下,上传多个文件到服务器。 ...

    struts2多文件的上传

    在本项目中,"struts2多文件的上传"实现了用户一次性上传多个文件的能力。 要理解这个功能,首先我们需要了解Struts2中的Action类和Interceptor(拦截器)。Action类是处理用户请求的核心,而Interceptor则用于处理...

    jquery+struts2实现文件上传

    jQuery是一个轻量级的JavaScript库,提供了丰富的交互效果和API,而Struts2是Java企业级开发中广泛使用的MVC框架,它提供了一套完善的文件上传机制。 首先,我们需要确保在项目中引入了Struts2的核心库。根据描述,...

    struts2异步多文件上传和下载

    在Struts2中,你需要在Action类中定义一个或多个类型为`List&lt;Part&gt;`的字段,来接收上传的文件。 对于多文件上传,用户可以通过HTML表单的`&lt;input type="file" multiple&gt;`标签选择多个文件。然后,这些文件会在...

    struts+jquery文件上传

    Action类中需要包含一个或多个`java.io.File`类型的属性,以及对应的`org.apache.struts2.interceptor.FileUploadInterceptor`注解,以接收上传的文件。例如: ```xml &lt;param name="maximumSize"&gt;1048576...

    struts2+ajax文件进度条的实现

    通过理解Ajax的工作原理、Struts2的文件上传机制以及前端组件的使用,我们可以构建出高效且具有良好交互性的文件上传系统。在实际开发中,还可以考虑错误处理、安全性以及性能优化等更多方面,以确保应用的稳定性和...

    Jquery与struts2

    **jQuery与Struts2整合详解** 在Web开发中,jQuery是一个强大的JavaScript库,它极大地简化了JavaScript的使用,使得前端交互更加便捷高效。而Struts2作为一款成熟的MVC框架,广泛应用于Java后端开发,提供了强大的...

    struts2多文件上传

    Struts2多文件上传是Java Web开发中常见的一项功能,用于允许用户一次上传多个文件。在Struts2框架中,实现这一功能涉及到一系列的技术和步骤。以下是对这一知识点的详细说明: 1. **Struts2框架**:Struts2是一个...

    Struts2 JQuery 文件上传 进度条

    本教程将详细讲解如何在Struts2中集成JQuery File Upload插件,实现文件上传的进度条效果。 首先,我们需要在项目中引入Struts2和JQuery的相关库。Struts2提供了强大的Action支持,而JQuery则是一个强大的...

    struts2多文件上传显示进度

    在Struts2中实现多文件上传并显示进度是常见的需求,尤其是在处理大文件或者批量上传时,用户需要实时了解上传进度以提升用户体验。在本案例中,我们将探讨如何在不依赖任何第三方插件的情况下实现这一功能。 首先...

    struts2整合jquery实现层拖拽即时保存。源码

    综上所述,这个项目涵盖了前端交互设计、后端业务处理、服务器部署和文件组织等多个方面,展示了Struts2和jQuery结合在Web开发中的强大功能。开发者需要对MVC架构、jQuery拖放API、Struts2框架以及Ajax通信有深入...

    省市联动jquery+struts2

    标题中的“省市联动jQuery+Struts2”是指在Web开发中使用jQuery库和Struts2框架实现的一个功能,即当用户选择一个省份时,相关的城市会动态地在下拉列表中加载出来,提供用户选择。这个功能在很多需要收集用户地址...

    jquery.validate 与 struts2的整合使用

    2. **配置Struts2**:在struts.xml配置文件中,定义一个或多个Action,这些Action会处理用户提交的表单。同时,可以配置拦截器栈,例如使用`validation`拦截器进行后端数据校验。 3. **编写Action类**:创建一个...

    struts2-jquery-plug ShowCase

    Struts2与jQuery的集成主要依赖于struts2-jquery-plugin,这个插件提供了一系列的标签库,使开发者可以直接在JSP页面中使用jQuery功能,而无需编写大量的JavaScript代码。例如,`&lt;sj:head&gt;`标签会自动引入jQuery库和...

    struts2实现多文件异步上传

    以上就是使用Struts2实现多文件异步上传的主要步骤。在实际开发中,可能还需要考虑错误处理、文件存储策略、权限控制等问题。记得在完成开发后,进行充分的测试,确保上传功能的稳定性和安全性。

    Jquery Struts2 Upload File

    在实际开发中,还可以考虑其他优化措施,如使用Struts2的拦截器进行文件大小验证、文件类型检查等预处理操作,或者使用多文件上传功能,如`multiple`属性配合`FormData`对象,允许用户一次上传多个文件。 最后,...

    struts1实现的文件批量上传

    在本文中,我们将探讨如何使用Struts1框架实现文件的批量上传功能。Struts1是一个经典的Java Web应用程序框架,它提供了...通过这些步骤,我们可以构建一个完整的文件上传系统,让用户能够方便地上传多个文件到服务器。

    struts2-jquery-plugin使用手册,自己写的

    通过以上介绍,我们了解了Struts2-jQuery-Plugin的基本概念、使用方法以及其在提高Web应用交互性方面的作用。在实际项目中,结合源码和工具,开发者可以充分利用这个插件,打造更加高效、友好的用户界面。

Global site tag (gtag.js) - Google Analytics