【本文简介】

struts 多文件上传。基于”零配置“+"ajaxfileupload" 的一个简单例子。

【导入依赖jar包】

  1. jquery-1.7.2.js : http://jquery.com/download/
  2. ajaxfileupload.js:http://fileuploadajax.codeplex.com/releases/view/8061

【修改 ajaxfileupload.js 使其支持多文件】

打开js,找到:

 var oldElement = jQuery('#' + fileElementId);
var newElement = jQuery(oldElement).clone();
jQuery(oldElement).attr('id', fileId);
jQuery(oldElement).before(newElement);
jQuery(oldElement).appendTo(form);

改成:

 for(var i in fileElementId){
var oldElement = jQuery('#' + fileElementId[i]);
var newElement = jQuery(oldElement).clone();
jQuery(oldElement).attr('id', fileId);
jQuery(oldElement).before(newElement);
jQuery(oldElement).appendTo(form);
}

【文件夹结构】

【web.xml】

     <filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>

【struts.xml】

 <!-- URL资源分隔符 -->
<constant name="struts.convention.action.name.separator" value="_" />
<!-- ****************************以下是文件上传的设置*********************************** -->
<!-- 指定国际化资源文件的baseName为messageResource -->
<!-- 设置该应用使用的解码集 -->
<constant name="struts.i18n.encoding" value="utf-8"/>
<!-- 上传的全部文件的最大限制-->
<constant name="struts.multipart.maxSize" value="1024102400"/>
<!-- 设置存放临时文件的文件夹 -->
<constant name="struts.multipart.saveDir" value="/tmp"></constant>
<!-- ****************************以上是文件上传的设置*********************************** -->

【JSP代码】

以上的web.xml配置导致下面的访问地址的方法名有要加:.action

以上的struts.xml配置 URL 资源分隔符导致下面的访问地址的 类名第一个字母的大写换成 ”_小写“

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>"> <title>My JSP 'MyJsp.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
<script type="text/javascript" src="js/jquery-1.7.2.js"></script>
<script type="text/javascript" src="js/ajaxfileupload.js"></script>
<script type="text/javascript">
function ajaxFileUpload()
{
var file = ['file1','file2']; $.ajaxFileUpload
(
{
url:'upload_file_by_annotation!upload.action',//用于文件上传的服务器端请求地址
secureuri:false,//一般设置为false
fileElementId: file,// 文件id数组
dataType: 'JSON',//返回值类型 一般设置为json
success: function (data, status) //服务器成功响应处理函数
{
alert("success");
},
error: function (data, status, e)//服务器响应失败处理函数
{
alert("fail");
}
}
); return false; } </script> </head> <body>
<input type="file" id="file1" name="file" />
<input type="file" id="file2" name="file" />
<br />
<input type="button" value="上传" onclick="return ajaxFileUpload();"> </body>
</html>

【action代码】

注:其实这个说是annotation版本,但因为 没有特别要设置的,所以annotation也省了。

假如要跳转到其他页面,可自己加入annotation。简单annotaion使用例子可用参看上一篇文章:

《struts文件下载 annotation 注解版》http://www.cnblogs.com/xiaoMzjm/p/3879048.html

 package com.modelsystem.action;

 import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List; import org.apache.struts2.ServletActionContext; /**
* @描述 struts 多文件上传 annotation注解(零配置)+ ajaxfileupload + 异步 版本
* @作者 小M
* @博客 http://www.cnblogs.com/xiaoMzjm/
* @时间 2014/07/30
*/
public class UploadFileByAnnotationAction extends BaseAction { private static final long serialVersionUID = 1L; // 上传的文件,struts会自动帮我们填充至此,因为多文件,所以用List
private List<File> file; // 上传的文件的文件名,因为多文件,所以用List
private List<String> fileFileName; // 上传的文件的类型,因为多文件,所以用List
private List<String> fileContentType; public List<File> getFile() {
return file;
} public void setFile(List<File> file) {
this.file = file;
} public List<String> getFileFileName() {
return fileFileName;
} public void setFileFileName(List<String> fileFileName) {
this.fileFileName = fileFileName;
} public List<String> getFileContentType() {
return fileContentType;
} public void setFileContentType(List<String> fileContentType) {
this.fileContentType = fileContentType;
} /**
* 文件上传关键方法。
*/
public String upload(){ // 文件所放的文件夹。, 有关路径问题,请参考另一篇博文:http://www.cnblogs.com/xiaoMzjm/p/3878758.html
String root = ServletActionContext.getServletContext().getRealPath("/")+"\\upload\\"; //循环上传的文件
for(int i = 0 ; i < file.size() ; i ++){ InputStream is = null ; OutputStream os = null;
try {
// 获取当前遍历到的文件,new 一个文件输入流,连接到该文件。
is = new FileInputStream(file.get(i)); // new 一个文件,连接到要存储的文件夹处。
File destFile = new File(root,this.getFileFileName().get(i)); // new 一个输出流,连接到要存储的文件处。
os = new FileOutputStream(destFile); // 字节流,规定可写入的字节数。
byte[] buffer = new byte[is.available()];
int length = 0 ; // 开始写入文件
while((length = is.read(buffer))>0){
os.write(buffer, 0, length);
} } catch (Exception e) {
e.printStackTrace();
} finally {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return SUCCESS;
}
}

struts 多文件上传 annotation注解(零配置)+ ajaxfileupload + 异步 版本的更多相关文章

  1. Struts的文件上传下载

    Struts的文件上传下载 1.文件上传 Struts2的文件上传也是使用fileUpload的组件,这个组默认是集合在框架里面的.且是使用拦截器:<interceptor name=" ...

  2. struts 多文件上传 xml 版本

    [本文简介] 本文将介绍 以配置 struts.xml  的方式 实现 多文件上传的功能. [文件夹结构] [struts.xml] <?xml version="1.0" ...

  3. java框架篇---struts之文件上传和下载

    Struts2文件上传 Struts 2框架提供了内置支持处理文件上传使用基于HTML表单的文件上传.上传一个文件时,它通常会被存储在一个临时目录中,他们应该由Action类进行处理或移动到一个永久的 ...

  4. Struts中文件上传的一些规则...

    1.action中定义规范 如果jsp中file的name="xxx",那么后台action中的属性要做相应更改为 private File xxx; private String ...

  5. php curl文件上传兼容php5.0~5.6各版本

    PHP 5.0~5.6 各版本兼容的cURL文件上传 最近做的一个需求,使用PHP cURL上传文件.踩坑若干,整理如下. 不同版本PHP之间cURL的区别 PHP的cURL支持通过给CURL_POS ...

  6. IIS7 大文件上传 asp.net iis配置

    IS6下上传大文件没有问题,但是迁移到IIS7下面,上传大文件时,出现HTTP 404错误. IIS配置上传大小,webconfig <!-- 配置允许上传大小 --><httpRu ...

  7. 前端笔记之微信小程序(三)GET请求案例&文件上传和相册API&配置https

    一.信息流小程序-GET请求案例 1.1服务端接口开发 一定要养成接口的意识,前端单打独斗出不来任何效果,必须有接口配合,写一个带有分页.关键词查询的接口: 分页接口:http://127.0.0.1 ...

  8. struts实现文件上传和下载。

    先来实现上传. 写上传不管语言,都要先注意前端的form那儿有个细节. <form name="form1" method="POST" enctype= ...

  9. FTP文件上传以及获取ftp配置帮助类

    帮助类: using QSProjectBase; using Reform.CommonLib; using System; using System.Collections.Generic; us ...

随机推荐

  1. poj1703 Find them, Catch them(并查集的应用)

    Find them, Catch them   Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 32225   Accepte ...

  2. 自定义Django的admin界面

    第6章介绍了Django的admin界面,现在是回过头来仔细看看这个的时候了 我们前面讲的几次admin是Django的"杀手级特性",并且大多数Django开发人员很快爱上了它节 ...

  3. C#中的事件介绍

    什么是事件?事件有哪些?怎么用事件? 一.什么是事件? 事件(Event) 基本上说是一个用户操作,如按键.点击.鼠标移动.输入值改变等等,或者是一些出现,如系统生成的通知.应用程序需要在事件发生时响 ...

  4. 基于ZK的分布式锁实现

    import java.util.concurrent.TimeUnit; import org.apache.curator.framework.CuratorFramework; import o ...

  5. pl/sql 实例精解 08

    1: EXCEPTION 2: WHEN EXCEPTION_NAME THEN 3: ERROR-PROCESSING STATEMENTS; 写在 begin 与 end 的之间的处理异常块. 常 ...

  6. [Tips]Javascrip计算文件行数

    function calcLineCount(filename, callback) { var fs = require('fs'); var fileStream = fs.createReadS ...

  7. java 教程

    1.视频教程 http://blog.csdn.net/zhangdaiscott/article/details/18220411 2.书籍教程: 3.学习课程

  8. Linux下面 多线程死锁问题的调试

    最近写服务,经常是单进程,多线程的,加了各种锁,很担心出现死锁问题,专门学习了一下死锁问题的诊断. 死锁 (deallocks): 是指两个或两个以上的进程(线程)在执行过程中,因争夺资源而造成的一种 ...

  9. Android插件化开发之OpenAtlas生成插件信息列表

    上一篇文章.[Android插件化开发之Atlas初体验]( http://blog.csdn.net/sbsujjbcy/article/details/47446733),简单的介绍了使用Atla ...

  10. sql 存储过程调用函数

    /****************************************************************************** ** Name: usp_biz_Con ...