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="删 除" id="deleteFile1"
disabled="disabled" onclick="deleteFile()"
style="text-align: center;">
<input type="button" value="添 加" 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结合实现的多文件上传功能是一种常见的Web开发技术,特别是在处理大量数据时,用户需要上传多个文件的情况。这个项目的核心是利用Struts2的Action支持和jQuery的AJAX功能,以及一个用于展示进度条的...
标题中的"JQuery_uploadify_struts2_jsp__ajax多文件上传"涉及到的是一个使用jQuery、uploadify插件、Struts2和JSP技术实现的AJAX多文件上传功能。这个功能允许用户在不刷新页面的情况下,上传多个文件到服务器。 ...
在本项目中,"struts2多文件的上传"实现了用户一次性上传多个文件的能力。 要理解这个功能,首先我们需要了解Struts2中的Action类和Interceptor(拦截器)。Action类是处理用户请求的核心,而Interceptor则用于处理...
jQuery是一个轻量级的JavaScript库,提供了丰富的交互效果和API,而Struts2是Java企业级开发中广泛使用的MVC框架,它提供了一套完善的文件上传机制。 首先,我们需要确保在项目中引入了Struts2的核心库。根据描述,...
在Struts2中,你需要在Action类中定义一个或多个类型为`List<Part>`的字段,来接收上传的文件。 对于多文件上传,用户可以通过HTML表单的`<input type="file" multiple>`标签选择多个文件。然后,这些文件会在...
Action类中需要包含一个或多个`java.io.File`类型的属性,以及对应的`org.apache.struts2.interceptor.FileUploadInterceptor`注解,以接收上传的文件。例如: ```xml <param name="maximumSize">1048576...
通过理解Ajax的工作原理、Struts2的文件上传机制以及前端组件的使用,我们可以构建出高效且具有良好交互性的文件上传系统。在实际开发中,还可以考虑错误处理、安全性以及性能优化等更多方面,以确保应用的稳定性和...
**jQuery与Struts2整合详解** 在Web开发中,jQuery是一个强大的JavaScript库,它极大地简化了JavaScript的使用,使得前端交互更加便捷高效。而Struts2作为一款成熟的MVC框架,广泛应用于Java后端开发,提供了强大的...
Struts2多文件上传是Java Web开发中常见的一项功能,用于允许用户一次上传多个文件。在Struts2框架中,实现这一功能涉及到一系列的技术和步骤。以下是对这一知识点的详细说明: 1. **Struts2框架**:Struts2是一个...
本教程将详细讲解如何在Struts2中集成JQuery File Upload插件,实现文件上传的进度条效果。 首先,我们需要在项目中引入Struts2和JQuery的相关库。Struts2提供了强大的Action支持,而JQuery则是一个强大的...
在Struts2中实现多文件上传并显示进度是常见的需求,尤其是在处理大文件或者批量上传时,用户需要实时了解上传进度以提升用户体验。在本案例中,我们将探讨如何在不依赖任何第三方插件的情况下实现这一功能。 首先...
综上所述,这个项目涵盖了前端交互设计、后端业务处理、服务器部署和文件组织等多个方面,展示了Struts2和jQuery结合在Web开发中的强大功能。开发者需要对MVC架构、jQuery拖放API、Struts2框架以及Ajax通信有深入...
标题中的“省市联动jQuery+Struts2”是指在Web开发中使用jQuery库和Struts2框架实现的一个功能,即当用户选择一个省份时,相关的城市会动态地在下拉列表中加载出来,提供用户选择。这个功能在很多需要收集用户地址...
2. **配置Struts2**:在struts.xml配置文件中,定义一个或多个Action,这些Action会处理用户提交的表单。同时,可以配置拦截器栈,例如使用`validation`拦截器进行后端数据校验。 3. **编写Action类**:创建一个...
Struts2与jQuery的集成主要依赖于struts2-jquery-plugin,这个插件提供了一系列的标签库,使开发者可以直接在JSP页面中使用jQuery功能,而无需编写大量的JavaScript代码。例如,`<sj:head>`标签会自动引入jQuery库和...
以上就是使用Struts2实现多文件异步上传的主要步骤。在实际开发中,可能还需要考虑错误处理、文件存储策略、权限控制等问题。记得在完成开发后,进行充分的测试,确保上传功能的稳定性和安全性。
在实际开发中,还可以考虑其他优化措施,如使用Struts2的拦截器进行文件大小验证、文件类型检查等预处理操作,或者使用多文件上传功能,如`multiple`属性配合`FormData`对象,允许用户一次上传多个文件。 最后,...
在本文中,我们将探讨如何使用Struts1框架实现文件的批量上传功能。Struts1是一个经典的Java Web应用程序框架,它提供了...通过这些步骤,我们可以构建一个完整的文件上传系统,让用户能够方便地上传多个文件到服务器。
通过以上介绍,我们了解了Struts2-jQuery-Plugin的基本概念、使用方法以及其在提高Web应用交互性方面的作用。在实际项目中,结合源码和工具,开发者可以充分利用这个插件,打造更加高效、友好的用户界面。