jquery ajax+spring mvc上传文件

简介: jquery ajax+spring mvc上传文件

导入commons-fileupload-1.2.2.jar和commons-io-2.4.jar及spring的一些jar包

创建上传处理类UploadAction

package com.mysite.test;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Iterator;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.io.FileUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;
@Controller
public class UploadAction {
  private static final Logger logger = LoggerFactory.getLogger(UploadAction.class);
  private final static int maxSize = 209715200;// 1024*1024*200 (200M)
  private String filePath="/uploads/";
  @RequestMapping(value = "/upload.do")
  public void fileUpload(HttpServletRequest request, HttpServletResponse response) {
    CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());
    multipartResolver.setDefaultEncoding("UTF-8");
    if (multipartResolver.isMultipart(request)) {
      StringBuffer result = new StringBuffer();
      long startTime = System.currentTimeMillis(); // 获取开始时间
      MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
      Iterator<String> ite = multiRequest.getFileNames();
      response.setCharacterEncoding("UTF-8");
      PrintWriter writer = null;
      try {
        writer = response.getWriter();
        while (ite.hasNext()) {
          MultipartFile file = multiRequest.getFile(ite.next());
          if (file.getSize() > maxSize) {
            result.append("文件[" + file.getOriginalFilename() + "]的大小超过限制(200M)").append("\r\n");
            writer.print(result);
            writer.flush();
            return;
          }
          if (file != null) {
            try {
              File serverPath = new File(filePath);
              if (!serverPath.exists()) {
                logger.warn("The path of server save file is not exists!");
                serverPath.mkdirs();
              }
              if (!serverPath.isDirectory()) {
                logger.warn("The path of server save file is not directory!");
                return;
              }
              if (!serverPath.canWrite() || !serverPath.canRead()) {
                logger.warn("The path of server save file cannot write or cannot read!");
                serverPath.setReadable(true);
                serverPath.setWritable(true);
              }
              File localFile = new File(filePath + file.getOriginalFilename());
              if (localFile.isFile() && localFile.exists()) {
                String name = localFile.getName();
                String oldName = name.substring(0, name.lastIndexOf(".")) + "_" + System.currentTimeMillis() + "_old" + name.substring(name.lastIndexOf("."));
                FileUtils.copyFile(localFile, new File(filePath + oldName));
                FileUtils.forceDelete(localFile);
              }
              file.transferTo(localFile); // 将上传文件写到服务器上指定的文件
              long endTime = System.currentTimeMillis(); // 获取结束时间
              logger.info("upload file success!expend {} ms", (endTime - startTime));
              String filePath = localFile.getAbsolutePath();
              logger.info("the file save to:{}", filePath);
              result.append("The file [").append(file.getOriginalFilename()).append("] upload success!\n");
            } catch (IOException e) {
              logger.error("has a error:{}", e);
            }
          }
        }
        writer.print(result);
        writer.flush();
      } catch (IOException e1) {
        e1.printStackTrace();
      } finally {
        if (writer != null) {
          writer.close();
        }
      }
    }
  }
}


在springmvc-servlet.xml配置上传属性

<!-- 文件上传解析器 -->  
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">  
    <property name="defaultEncoding" value="utf-8"></property>  
    <property name="maxUploadSize" value="209715200"></property><!-- 最大上传文件大小 200M-->  
    <property name="maxInMemorySize" value="40960"></property>  
</bean>

jsp导入js类库,因为样式是使用的easyui,所有需要引入easyui的js及样式

<script type="text/javascript" src="${base}js/jquery-1.8.3.min.js"></script>
<script type="text/javascript" src="${base}js/ajaxFileUpload.js"></script>
<script type="text/javascript" src="${base}js/jquery.easyui.min.js"></script>


导入样式文件

<link rel="stylesheet" type="text/css" href="${base}css/easyui.css">
<link rel="stylesheet" type="text/css" href="${base}css/icon.css">
<link rel="stylesheet" type="text/css" href="${base}css/color.css">
<link rel="stylesheet" type="text/css" href="${base}css/demo.css">

css

.aitem {margin: 10px 0 5px 0;padding-bottom: 5px;border-bottom: 1px solid #eee;}
.aitem .item {height: 40px;line-height: 40px;vertical-align: middle;}
.aitem span {padding-right: 5px;}
.aitem .title {width: 120px;}
.aitem input[type="text"],input[type="password"],input[type="file"] {width: 200px;}
/*a  upload */
.a-upload {
text-decoration:none;
    padding: 2px 10px;
    height: 20px;
    line-height: 20px;
    position: relative;
    cursor: pointer;
    color: #777;
    background: #eee;
    border: 1px solid #ddd;
    border-radius: 4px;
    overflow: hidden;
    display: inline-block;
    *display: inline;
    *zoom: 1
}
.a-upload  input {
    position: absolute;
    width:100%;
    right: 0;
    top: 0;
    opacity: 0;
    filter: alpha(opacity=0);
    cursor: pointer
}
.a-upload:hover {color: #444;background: #eee;border-color: #ccc;text-decoration: none;}
#fileName{color: #444;height: 24px;line-height: 24px;overflow: hidden;display: inline-block;*display: inline;*zoom: 1}


jsp

<div id="dlg" class="easyui-dialog" data-options="buttons:'#dlg-buttons',modal:true,closed:true" style="width:450px;height:330px;">
    <form id="fm" name="fm" method="post" novalidate enctype="multipart/form-data">
        <div id="uploadfile" class="aitem" style="display:block;">
            <label><span style="color:red;">*</span>需更新的文件 (文件格式:zip,tar,jar,properties,bat,sh)</label>
            <div class="item" style="height: 45px">
                    <a href="javascript:;" class="a-upload">
                        <input type="file" name="file" id="file" οnchange="change(event);">选择文件
                    </a>
                    <span id="fileName"></span>
            </div>
            <label>文件最大不能超过200M</label>
        </div>
    </form>
</div>
<div id="dlg-buttons">
    <button class="easyui-linkbutton c6" id="confirm" style="width:80px">确定</button>
    <button class="easyui-linkbutton c5"  οnclick="closeDialog('dlg')" style="width:80px">关闭窗口</button>
</div>




编写js函数

//上传文件,点击选择文件后获取文件名&文件大小
function change(event){
    event.stopPropagation();
    var src=event.target || window.event.srcElement; //获取事件源,兼容chrome/IE
    //alert( src.value );
    //测试chrome浏览器、IE6,获取的文件名带有文件的path路径
    //下面把路径截取为文件名
    var path=src.value;
    if(!path){
        return false;
    }
    var filename=path.substring( path.lastIndexOf('\\')+1 );
    //获取文件名的后缀名(文件格式)
    var suffix=path.substring( path.lastIndexOf('.')+1 );
    //zip,tar,jar,properties,bat,sh
    if(suffix.toLowerCase()!="zip"&&suffix.toLowerCase()!="tar"&&suffix.toLowerCase()!="jar"&&suffix.toLowerCase()!="properties"
        &&suffix.toLowerCase()!="bat"&&suffix.toLowerCase()!="sh"){
        $.messager.alert("警告","只能上传以下后缀名的文件\nzip,tar,jar,properties,bat,sh");
        //$("input[name='file']").val("");
        src.value="";
        if(src.id=='file')$("#fileName").empty();
        else $("#selfFileName").empty();
        return false;
    }
    var file_size = 0;
    if ($.browser.msie) {
        var img = new Image();
        img.src = path;
        file_size = img.fileSize;
    } else {
        file_size = src.files[0].size;
    }
    var size = file_size / 1024;
    var maxSize = 200*1024;//200M
    if (size > maxSize) {
        $.messager.alert("警告","只能上传200M以下的文件");
        src.value="";
        if(src.id=='file')$("#fileName").empty();
        else $("#selfFileName").empty();
        return false;
    }
    if(src.id=='file')$("#fileName").empty().text(filename);
    else $("#selfFileName").empty().text(filename);
    return true;
};
//确认上传按钮绑定事件
$("#confirm").bind("click", function(event) {
    var file=$("input[name='file']").val();
    $.messager.confirm("确认","你确定要这次操作吗?", function (r) {
        if (r) {
            if(!file){
                $.messager.alert("警告","请选择需要上传的文件!","warning");
                return false;
            }
            var command='1';
            $.ajaxFileUpload({  
                fileElementId: 'file',  
                url: 'upload.do',  
                data : {
                    /*command : command*///传参数
                },
                dataType: 'text',
                success: function (data, status) {  
                  if (status == "success") {
                        $.messager.alert("",data);
                    }
                },  
                error: function (XMLHttpRequest, status, error) {  
                    var msg = "服务器返回消息:" + XMLHttpRequest.responseText;  
                    $.messager.alert('提示',msg);  
                },  
                complete: function (obj) {
                }  
           });
        }
    });
});




co

cor

相关文章
|
27天前
|
JSON 前端开发 Java
SSM:SpringMVC
本文介绍了SpringMVC的依赖配置、请求参数处理、注解开发、JSON处理、拦截器、文件上传下载以及相关注意事项。首先,需要在`pom.xml`中添加必要的依赖,包括Servlet、JSTL、Spring Web MVC等。接着,在`web.xml`中配置DispatcherServlet,并设置Spring MVC的相关配置,如组件扫描、默认Servlet处理器等。然后,通过`@RequestMapping`等注解处理请求参数,使用`@ResponseBody`返回JSON数据。此外,还介绍了如何创建和配置拦截器、文件上传下载的功能,并强调了JSP文件的放置位置,避免404错误。
|
1月前
|
前端开发 JavaScript 数据处理
JQuery 拦截请求 | Ajax 请求拦截
【10月更文挑战第4天】
70 1
|
1月前
|
前端开发 Java 应用服务中间件
【Spring】Spring MVC的项目准备和连接建立
【Spring】Spring MVC的项目准备和连接建立
52 2
|
2月前
|
缓存 前端开发 Java
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
Soring Boot的起步依赖、启动流程、自动装配、常用的注解、Spring MVC的执行流程、对MVC的理解、RestFull风格、为什么service层要写接口、MyBatis的缓存机制、$和#有什么区别、resultType和resultMap区别、cookie和session的区别是什么?session的工作原理
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
|
1月前
|
XML 前端开发 Java
Spring,SpringBoot和SpringMVC的关系以及区别 —— 超准确,可当面试题!!!也可供零基础学习
本文阐述了Spring、Spring Boot和Spring MVC的关系与区别,指出Spring是一个轻量级、一站式、模块化的应用程序开发框架,Spring MVC是Spring的一个子框架,专注于Web应用和网络接口开发,而Spring Boot则是对Spring的封装,用于简化Spring应用的开发。
97 0
Spring,SpringBoot和SpringMVC的关系以及区别 —— 超准确,可当面试题!!!也可供零基础学习
|
2月前
|
JSON 前端开发 JavaScript
jQuery AJAX 方法
jQuery AJAX 方法
31 1
|
2月前
|
JSON JavaScript 前端开发
Jquery常用操作汇总,dom操作,ajax请求
本文汇总了jQuery的一些常用操作,包括DOM元素的选择、添加、移除,表单操作,以及如何使用jQuery发送Ajax请求,涵盖了GET、POST请求和文件上传等常见场景。
|
2月前
|
XML 缓存 前端开发
springMVC02,restful风格,请求转发和重定向
文章介绍了RESTful风格的基本概念和特点,并展示了如何使用SpringMVC实现RESTful风格的请求处理。同时,文章还讨论了SpringMVC中的请求转发和重定向的实现方式,并通过具体代码示例进行了说明。
springMVC02,restful风格,请求转发和重定向
|
2月前
|
JSON 前端开发 JavaScript
jQuery AJAX 方法
jQuery AJAX 方法
20 1
|
3月前
|
Java 数据库连接 Spring
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
文章是关于Spring、SpringMVC、Mybatis三个后端框架的超详细入门教程,包括基础知识讲解、代码案例及SSM框架整合的实战应用,旨在帮助读者全面理解并掌握这些框架的使用。
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
下一篇
无影云桌面