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

下面就来详细讲解如何使用AjaxFileUpload和Struts2实现多文件上传功能。

环境说明

  • Struts2版本:2.5.20
  • AjaxFileUpload版本:1.1
  • JDK版本:1.8

准备工作

  1. 下载AjaxFileUpload插件,将其解压到项目中的WebRoot目录下的js文件夹中。

  2. 引入AjaxFileUpload插件:

```html

```

  1. 配置Struts2项目支持文件上传:

在struts.xml文件中添加以下代码段:

xml
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="104857600"/>
<property name="defaultEncoding" value="utf-8"/>
</bean>

实现文件上传功能

  1. 在页面中放置文件上传控件:

html
<input id="fileupload" type="file" name="uploadfile" multiple="true">

这里可能需要注意的是,multiple属性要设置为true,以支持多文件上传。

  1. 编写jQuery代码:

javascript
$(function(){
$("#fileupload").on("change",function(){
$.ajaxFileUpload({
url:'uploadFile.action',//上传的服务器地址
secureuri:false,//是否启用安全提交,默认为false
fileElementId:'fileupload',//要上传的文件控件ID
dataType: 'json',//服务器返回的数据类型
success: function (data, status){ //上传成功后的回调方法
//更新页面等操作
},
error: function (data, status, e){ //上传失败后的回调方法
//更新页面等操作
}
});
});
});

这段代码中,需要将url属性设置为文件上传处理的Action地址。

  1. 编写文件上传Action:

```java
public class FileUploadAction extends ActionSupport {
private List uploadfile;
private List uploadfileFileName;
private List uploadfileContentType;

   public String upload() throws Exception {
       if (uploadfile != null) {
           for (int i = 0; i < uploadfile.size(); i++) {
               File file = uploadfile.get(i);
               String fileName = uploadfileFileName.get(i);
               String fileType = uploadfileContentType.get(i);
               //执行文件上传操作
               //...
           }
       }
       return SUCCESS;
   }

   //getter和setter方法

}
```

在文件上传Action中,需要添加三个List类型的属性,分别用于存储上传的文件、文件名和文件类型。同时,在方法中还需要进行文件上传相关的操作,例如将文件保存到服务器等。

  1. 在struts.xml文件中配置Action:

xml
<action name="uploadFile" class="com.example.action.FileUploadAction" method="upload">
<interceptor-ref name="defaultStack"/>
<result name="success">success.jsp</result>
<result name="error">error.jsp</result>
</action>

至此,使用AjaxFileUpload和Struts2实现多文件上传功能的攻略已经完成。下面再分别给出两条具体的示例:

示例1

在控制层中,可以使用FileUtils.copyFile()方法将上传的文件直接保存到服务器:

public String upload() throws Exception {
    if (uploadfile != null) {
        for (int i = 0; i < uploadfile.size(); i++) {
            File file = uploadfile.get(i);
            String fileName = uploadfileFileName.get(i);
            String fileType = uploadfileContentType.get(i);
            String savePath = "D:\\upload\\" + fileName;
            FileUtils.copyFile(file, new File(savePath));
        }
    }
    return SUCCESS;
}

示例2

在视图层中,可以在上传成功后显示上传的文件:

$(function(){
     $("#fileupload").on("change",function(){
          $.ajaxFileUpload({
               url:'uploadFile.action',
               secureuri:false,
               fileElementId:'fileupload',
               dataType: 'json',
               success: function (data, status){
                     var files = data.files;
                     //显示上传的文件
                     for(var i=0;i<files.length;i++){
                         var file = files[i];
                         var fileName = file.fileName;
                         var fileType = file.fileType;
                         var src = file.src;
                         $("#filelist").append("<img src='"+src+"' >");
                     }
               },
               error: function (data, status, e){
                      //更新页面等操作
               }
          });
     });
});

在文件上传成功后,服务器返回的数据中会包含上传的文件信息。我们可以从返回的数据中取出文件信息,然后使用JavaScript在页面上显示出来。

至此,两条示例都已经介绍完毕。如果需要实现多图片上传的功能,也是可以参照以上方法的思路进行实现的。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:AjaxFileUpload+Struts2实现多文件上传功能 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • java自动生成编号的实现(格式:yyMM+四位流水号)

    Java自动生成编号的实现,通常需要考虑到以下几个方面: 记录上一个流水号。 根据当前时间生成编号的前缀(yyMM)。 每次生成编号时自增流水号,如果流水号超出限定位数则将其归零并增加前缀的年月数。 将新编号保存在数据库中。 下面是一个完整的代码示例和实现攻略。 1. 定义实体类 首先定义一个实体类,包含自动生成编号所需的属性和setter/getter方法…

    Java 2023年5月30日
    00
  • 什么是Java反射?

    Java反射( Java Reflection )是指在运行时动态地从已有的类中获取信息以及操作对象的能力。反射允许我们在程序运行期间可以检查、获取和修改任意一个类的信息,包括它的注解、成员变量、方法以及构造器等内容。在Java中使用反射,我们可以实现动态地加载和调用类,获取泛型信息等。下面是Java反射的使用攻略。 1. 获取类对象 我们可以通过 Clas…

    Java 2023年5月11日
    00
  • Java基础泛型详情

    Java基础泛型详情 什么是泛型 泛型是Java的一种特性,可以让用户在编写代码时将数据类型作为参数进行传递。通过泛型,Java可以实现更加安全、灵活和可读性强的代码。泛型的本质是参数化类型,也就是说,使用时可以在代码中传递各种类型的数据,这样可以避免一些常见的类型错误。 泛型的语法 定义泛型类可以使用以下语法: class 类名<泛型参数1, 泛型参…

    Java 2023年5月26日
    00
  • 详解SpringMVC的拦截器链实现及拦截器链配置

    详解SpringMVC的拦截器链实现及拦截器链配置 在SpringMVC中,拦截器是一个非常重要的组件,它可以帮助我们在请求到达控制器之前或之后执行一些操作。本文将详细介绍SpringMVC的拦截器链实现及拦截器链配置,并提供两个示例说明。 拦截器链实现 在SpringMVC中,拦截器链是由HandlerInterceptor接口实现的。拦截器链中的每个拦截…

    Java 2023年5月17日
    00
  • Java+Redis撤销重做功能实现

    针对“Java+Redis撤销重做功能实现”的攻略,我们可以按照以下步骤进行: 一、概述 撤销和重做是一个常见的功能,可以提高用户的使用体验。在实现撤销重做功能时,我们可以利用 Redis 的数据结构,使用栈来实现。 二、具体实现 1. 初始化栈 首先,我们需要初始化两个栈,一个用来存储撤销操作的数据,一个用来存储重做操作的数据。初始化栈的实现代码如下所示:…

    Java 2023年5月26日
    00
  • spring kafka @KafkaListener详解与使用过程

    Spring Kafka @KafkaListener详解与使用过程 简介 Spring Kafka 为 Kafka 提供了 Producer 和 Consumer 的封装,提供了方便的API让我们在Spring Boot项目中使用Kafka。其中 @KafkaListener 的注解为我们编写 Kafka Consumer 提供便利。 使用步骤 使用 Sp…

    Java 2023年6月2日
    00
  • MyBatis的通俗理解:SqlSession.getMapper()源码解读

    下面是“MyBatis的通俗理解:SqlSession.getMapper()源码解读”的完整攻略。 一、背景介绍 在MyBatis中,SqlSession.getMapper()方法是一个非常重要的方法,可以获取到Mapper接口的代理对象,从而进行数据库操作。但是,为什么可以用一个接口进行数据库操作呢?这就需要了解一下MyBatis的动态代理机制。 二、…

    Java 2023年5月20日
    00
  • Java实现BASE64编码和解码的方法

    下面是“Java实现BASE64编码和解码的方法”的完整攻略。 BASE64编码和解码概述 BASE64是一种基于64个可打印字符来表示二进制数据的算法,在网络传输中常用于数据加密和解密、数字签名等领域。 BASE64编码 BASE64编码可以将任意二进制数据编码成可打印的ASCII字符集的代表字符串,常用于将二进制数据在网络传输或者在文本协议中作为参数进行…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部