AjaxFileUpload+Struts2实现多文件上传功能

本文重点给大家介绍AjaxFileUpload+Struts2实现多文件上传功能,具体实现代码大家参考下本文。

单文件和多文件的实现区别主要修改两点,

一是插件ajaxfileupload.js里接收file文件ID的方式

二是后台action是数组形式接收

1、ajaxFileUpload文件下载地址http://www.phpletter.com/Demo/AjaxFileUpload-Demo/

2、引入jquery-1.8.0.min.js、ajaxFileUpload.js文件

3、文件上传页面核心代码

<body>
  <form action="" enctype="multipart/form-data">
    <h2>
      多文件上传
    </h2>
    <input type="file" id="file1" name="file" />
    </br>
    <input type="file" id="file2" name="file" />
    </br>
    <input type="file" id="file3" name="file" />
    </br>
    <span>
      <table id="down">
      </table>
    </span>
    </br>
    <input type="button" onclick="fileUpload();" value="上传">
  </form>
</body>
<script type="text/javascript">
  function fileUpload() {
    var files = ['file1','file2','file3']; //将上传三个文件 ID 分别为file2,file2,file3
    $.ajaxFileUpload( {
      url : 'fileUploadAction',   //用于文件上传的服务器端请求地址
      secureuri : false,      //一般设置为false
      fileElementId : files,    //文件上传的id属性 <input type="file" id="file" name="file" />
      dataType : 'json',      //返回值类型 一般设置为json
      success : function(data, status) {
        var fileNames = data.fileFileName; //返回的文件名
        var filePaths = data.filePath;   //返回的文件地址
        for(var i=0;i<data.fileFileName.length;i++){
          //将上传后的文件 添加到页面中 以进行下载
          $("#down").after("<tr><td height='25'>"+fileNames[i]+
              "</td><td><a href='downloadFile?downloadFilePath="+filePaths[i]+"'>下载</a></td></tr>")
        }
      }
    })
  }
</script> 

以上fileElementId属性接收的files参数为['file1','file2','file3']

由于是多文件,所以我们需要修改ajaxfileupload.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);
}  

4、文件上传Action

public class FileAction {
  private File[] file;       //文件
  private String[] fileFileName;  //文件名
  private String[] filePath;    //文件路径
  private String downloadFilePath; //文件下载路径
  private InputStream inputStream;
  /**
   * 文件上传
   * @return
   */
  public String fileUpload() {
    String path = ServletActionContext.getServletContext().getRealPath("/upload");
    File file = new File(path); // 判断文件夹是否存在,如果不存在则创建文件夹
    if (!file.exists()) {
      file.mkdir();
    }
    try {
      if (this.file != null) {
        File f[] = this.getFile();
        filePath = new String[f.length];
        for (int i = 0; i < f.length; i++) {
          String fileName = java.util.UUID.randomUUID().toString(); // 采用时间+UUID的方式随即命名
          String name = fileName + fileFileName[i].substring(fileFileName[i].lastIndexOf(".")); //保存在硬盘中的文件名
          FileInputStream inputStream = new FileInputStream(f[i]);
          FileOutputStream outputStream = new FileOutputStream(path+ "\\" + name);
          byte[] buf = new byte[1024];
          int length = 0;
          while ((length = inputStream.read(buf)) != -1) {
            outputStream.write(buf, 0, length);
          }
          inputStream.close();
          outputStream.flush();
          //文件保存的完整路径
          // 如:D:\tomcat6\webapps\struts_ajaxfileupload\\upload\a0be14a1-f99e-4239-b54c-b37c3083134a.png
          filePath[i] = path + "\\" + name;
        }
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
    return "success";
  }
  /**
   * 文件下载
   * @return
   */
  public String downloadFile() {
    String path = downloadFilePath;
    HttpServletResponse response = ServletActionContext.getResponse();
    try {
      // path是指欲下载的文件的路径。
      File file = new File(path);
      // 取得文件名。
      String filename = file.getName();
      // 以流的形式下载文件。
      InputStream fis = new BufferedInputStream(new FileInputStream(path));
      byte[] buffer = new byte[fis.available()];
      fis.read(buffer);
      fis.close();
      // 清空response
      response.reset();
      // 设置response的Header
      String filenameString = new String(filename.getBytes("gbk"),"iso-8859-1");
      response.addHeader("Content-Disposition", "attachment;filename="+ filenameString);
      response.addHeader("Content-Length", "" + file.length());
      OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
      response.setContentType("application/octet-stream");
      toClient.write(buffer);
      toClient.flush();
      toClient.close();
    } catch (IOException ex) {
      ex.printStackTrace();
    }
    return null;
  }
  /**
   * 省略set get方法
   */
} 

5、struts配置

<!DOCTYPE struts PUBLIC
  "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
  "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
  <package name="ajax_code" extends="json-default">
    <!-- 文件上传 -->
    <action name="fileUploadAction" class="com.itmyhome.FileAction" method="fileUpload">
      <result type="json" name="success">
        <param name="contentType">text/html</param>
      </result>
    </action>
  </package>
  <package name="jsp_code" extends="struts-default">
    <!-- 文件下载 -->
    <action name="downloadFile" class="com.itmyhome.FileAction" method="downloadFile">
      <result type="stream">
         <param name="contentType">application/octet-stream</param>
         <param name="inputName">inputStream</param>
         <param name="contentDisposition">attachment;filename=${fileName}</param>
         <param name="bufferSize">4096</param>
      </result>
    </action>
  </package>
</struts> 

浏览器中输入:http://localhost:8080/struts_ajaxfileupload/index.jsp  即可进行文件上传

如图:

项目源码下载:http://demo.jb51.net/js/2017/struts_ajaxfileupload.rar

总结

以上所述是小编给大家介绍的AjaxFileUpload+Struts2实现多文件上传功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • struts2开发流程及详细配置

    一:Struts开发步骤: 1. web项目,引入struts - jar包 2. web.xml中,引入struts的核心功能 配置过滤器 3. 开发action 4. 配置action src/struts.xml 二:详细配置    1.引入8个jar文件 commons-fileupload-1.2.2.jar   [文件上传相关包] commons-io-2.0.1.jar struts2-core-2.3.4.1.jar           [struts2核心功能包] xwork-

  • struts+spring+hibernate三个框架的整合

    准备三个框架结合的lib包 Spring3结合Struts2的步骤如下: 1:开启Struts2结合Spring3,在struts.xml中添加如下语句: java代码: <constant name="struts.objectFactory" value="spring"/> 2:在web.xml中添加listener,如下: java代码: <listener> <listener-class> org.springfram

  • 详解Struts2动态方法调用

    动态方法就是一个Action对应多个请求,减少Action的数量 1.指定method属性 <action name="addAction" method="add" class="com.venn.action.HelloWorldAction"> <result>/jsp/add.jsp</result> </action> 2.感叹号(!)方式(不推荐使用) <action name=&

  • Struts2 通过ognl表达式实现投影

    projection(投影):俗话说就是过滤,就是过滤器把符合条件的过滤出来 struts.xml: <package name="ognl" namespace="/ognl" extends="struts-default"> <action name="pro" class="cn.edu.hpu.ognl.OgnlAction4"> <result name="

  • Struts2 OGNL表达式实例详解

    Object Graph Navigation Language:对象图导航语言,就是用点来访问成员变量 <s:property value="cat.name"/> 例1: struts.xml: <package name="ognl" namespace="/ognl" extends="struts-default"> <action name="og1" class=

  • Struts2获取参数的三种方法总结

    Struts2获取参数的三种方法总结 前言: Struts2不在建议我们使用原生的servletAPI来获取参数,这样做的目的是事项Struts2的action与servlet进行解耦,可以在日后更加方便的对action类进行测试. Struts2获取参数的三种办法: (1)属性驱动方式 (2)模型驱动方式 (3)对象驱动方式 one by one 属性驱动方式 /* * 参数获取方式之属性驱动方式 */ public class TestAction extends ActionSupport

  • Struts2修改上传文件大小限制方法解析

    首先struts上传最大大小由两个地方决定.  · struts.multipart.maxSize决定整个post的form最大是多大,所以这个限制是最初的.默认大小是接近2M,在struts的default.properties中定义.  · fileuploadInterceptor中可以定义maximumSize最大文件大小. 最初定义在struts.xml中定义了没有生效,后来发现在工程中的struts.properties中已经设置过,所以后来被覆盖了,更改struts.proper

  • AjaxFileUpload+Struts2实现多文件上传功能

    本文重点给大家介绍AjaxFileUpload+Struts2实现多文件上传功能,具体实现代码大家参考下本文. 单文件和多文件的实现区别主要修改两点, 一是插件ajaxfileupload.js里接收file文件ID的方式 二是后台action是数组形式接收 1.ajaxFileUpload文件下载地址http://www.phpletter.com/Demo/AjaxFileUpload-Demo/ 2.引入jquery-1.8.0.min.js.ajaxFileUpload.js文件 3.文

  • Struts2实现多文件上传功能

    前台form 表单:设置method=post,enctype=multipart/form-data. struts2在原有的上传解析器继承上做了进一步封装,更进一步简化了文件上传. Action需要使用3个属性来封装该文件域的信息: (1)类型为File的*属性封装了该文件域对应的文件内容: (2)类型为String的***FileName属性封装了该文件域对应的文件的文件类型: (3)类型为String的***ContentType属性封装了该文件域对应的文件的类型. 具体实现: 新建we

  • AjaxFileUpload结合Struts2实现多文件上传(动态添加文件上传框)

    上篇文章http://www.jb51.net/article/124489.htm介绍了ajaxfileupload实现多文件上传, 但只是固定的文件个数,如果需求不确定是多少文件 则我们就需要动态的添加文件上传框,以实现灵活性. 基于上篇基本框架是不变的,主要修改以下几个方面 1.jQuery实现动态添加删除文件上传框 2.获取文件上传框的ID 3.ajaxfileupload.js里将ID数组转换为需要的Object数组 依次解决上面问题 一.实现动态添加删除文件上传框 <body> &

  • Struts2实现文件上传功能

    Servlet 3.0规范的HttpServletRequest已经提供了方法来处理文件上传但这种上传需要在Servlet中完成.而Struts2则提供了更简单的封装. Struts2默认使用的是Jakarta的Common-FileUpload的文件上传框架,因此使用Struts2的文件上传功能,则需要添加两个jar包,即commons-io-2.2.jar和commons-fileupload-1.3.1.jar. Struts2简单文件上传示例: 1.文件上传页面 为了能上传文件,表单的m

  • java Struts2框架下实现文件上传功能

    本文实例为大家分享了Struts2框架实现文件上传的方法,供大家参考,具体内容如下 struts2的配置过程 (1)在项目中加入jar包 (2)web.xml中filter(过滤器)的配置 <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:x

  • Struts2实现单文件或多文件上传功能

    一.简述 Struts2的文件上传其实也是通过拦截器来实现的,只是该拦截器定义为默认拦截器了,所以不用自己去手工配置,<interceptor name="fileUpload" class="org.apache.struts2.interceptor.FileUploadInterceptor"/> 二.指定用户上传文件的大小,有两种方式 1)默认是在default.properties 文件的 struts.multipart.maxSize=20

  • AjaxUpLoad.js实现文件上传功能

    AjaxUpLoad.js的使用实现无刷新文件上传,如图. 图1 文件上传前 图2 文件上传后 1.创建页面并编写HTML 上传文档: <div class="uploadFile"> <span id="doc"><input type="text" disabled="disabled" /></span> <input type="hidden"

  • Ajax 配合node js multer 实现文件上传功能

    说明 作为一个node 初学者,最近在做一个聊天软件,支持注册.登录.在线单人.多人聊天.表情发送.各种文件上传下载.增删好友.聊天记录保存.通知声开关.背景图片切换.游戏等功能,所以用到了multer 模块,经过各种查文档,做demo例子,终于成功实现单个文件上传功能,支持大部分文件格式上传,同时显示到网页上 效果 是不是有种微信即视感,没错,就是根据网页版微信来做的, 要实现整体效果的话,要配合css和html来做,前端初学者,第一次发博客,实在捉急,近期,将会将代码放到github上去,感

  • 使用jQuery.form.js/springmvc框架实现文件上传功能

    使用的技术有jquery.form.js框架, 以及springmvc框架.主要实现异步文件上传的同时封装对象,以及一些注意事项. 功能本身是很简单的,但是涉及到一些传递参数类型的问题.例如:jquery的ajax方法与jquery.form.js中的ajaxSubmit方法的参数,具体细节将在下一篇博客中分享. 重点: html表格三要素: action="fileUpload/fileUpload" method="post" enctype="mul

  • Spring实现文件上传功能

    本篇文章,我们要来做一个Spring的文件上传功能: 1. 创建一个Maven的web工程,然后配置pom.xml文件,增加依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>1.0.2.RELEASE</version> </dep

随机推荐