zoukankan      html  css  js  c++  java
  • springMVC结合AjaxForm上传文件

    最近在项目中需要上传文件文件,之前一直都是form提交的,尝试了一下AjaxForm,感觉还比较好用,写篇随笔mark下,供以后使用。

    准备工作:
    下载jquery-form.js

    相关jar:

    commons-fileupload-1.1.1.jar

    commons-io-1.3.2.jar

    在spring-servlet.xml进行multipartResolver配置:

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

    这个是必须的,否则不好用。

    页面:

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" session="false" %>
    <html>
    <!-- 
    - Author(s): xieshuang
    - Date: 2016-06-20 13:46:20
    - Description:
    -->
    <head>
    <title>Title</title>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
    <script src="<%=request.getContextPath()%>/common/nui/nui.js" type="text/javascript"></script>
    <script src="<%=request.getContextPath()%>/common/nui/jquery/jquery-form.js" type="text/javascript"></script>
    <script type="text/javascript" src="<%=request.getContextPath()%>/page4nui/master/projecttype/js/projecttype_import.js"></script>
    <script type="text/javascript">
    	var contextPath="<%=request.getContextPath()%>";
    </script>
    </head>
    <body>
    <div id="test" class="nui-fit" style="padding-top:5px;min-300px;min-height:180px;">
        <form id="fileUpload"  method="post" enctype="multipart/form-data">
        <div id="dataImport"  style="100%;overflow:hidden;">
            <table style="100%;table-layout:fixed;" class="nui-form-table" >
                <tr>
    				<th  align="right"  style="25%" >选择文件:</th>
    				<td>
    					<input id="uploadFile" type="file" name="file" style="90%;"><font style="color:red;5%;"> *</font>
    				</td>
    			</tr>
            </table>      
        </div>
    
        <div style="100%;padding-top:10px;" align="center">
            <input style="60px;" iconCls="icon-ok" value="确定" type="submit" />
            <span style="display:inline-block;25px;"></span>
    	    <a class="nui-button" iconCls="icon-cancel" style="60px;" onclick="cancel">取消</a>
    	</div>	
    	</form>		    
    </div>
    </body>
    </html>
    

    核心js:

    var msg;
    $(function(){
    nui.parse();
    //ajax配置
    var options = {  
            url: contextPath+"/webapp/cfProjectType/importExcel",
            beforeSubmit:  showRequest,  //提交前处理 
            success:       showResponse,  //处理完成 
            resetForm: true,  
            dataType:  'json'  
           };  
        $('#fileUpload').submit(function() { //注意
         	$(this).ajaxSubmit(options); 
         	return false;//防止dialog 自动关闭
         });
    })
    
    //执行成功回调函数
    function showResponse(e) {
    	nui.hideMessageBox(msg);
    	if (e.importFlag == true) {
    		CloseWindow("ok");
    	} else {
    		//对错误的一些处理
    	}
    }
    
    //提交前的一些校验
    function showRequest(formData, jqForm, options){
    	if(formData[0].value=="" || formData[0].value==null){
    		nui.alert("请选择文件");
    		return false;
    	}
    	var fileName = $("#uploadFile").val().split("\").pop();
    	var strs = new Array(); //定义一数组
        strs = fileName.split('.');
        var suffix = strs [strs .length - 1];
        if (suffix != 'xls' && suffix != 'xlsx') {
        	nui.alert("请选择excel文件!");
        	return false;
        }
        msg = nui.loading("Loading", "Please waiting");
    }
    

    java代码:

    @SuppressWarnings("unchecked")
    @RequestMapping("/webapp/cfProjectType/importExcel")
    @ResponseBody
    public Map<String, Object> importExcel(@RequestParam("file") MultipartFile[] files, HttpServletRequest request)
            throws Throwable {
        //long starttiem = System.currentTimeMillis();
        InputStream fis;
        fis = null;
        File fileIn = null;
        try {
            for (MultipartFile myfile : files) {
                if (!myfile.isEmpty()) {
                    String realPath = request.getSession().getServletContext().getRealPath("/export");
                    fileIn = new File(realPath);
                    //判断上传文件的保存目录是否存在
                    if (!fileIn.exists() && !fileIn.isDirectory()) {
                        //创建目录
                        fileIn.mkdirs(路径);
                    }
                    //将上传的文件复制到文件夹下
                    myfile.transferTo(new File(路径+文件名));
    			}
    		   }
    		}	
    

    这里我之前用过另外一个方法FileUtils.copyInputStreamToFile(InputStream arg0, File arg1) 同样能将文件保存到路径下面

  • 相关阅读:
    CSS盒子模型
    getContextPath、getServletPath、getRequestURI、request.getRealPath的区别
    MYSQL中的CASE WHEN END AS
    单点登录的精华总结
    git&github
    June 21st 2017 Week 25th Wednesday
    June 20th 2017 Week 25th Tuesday
    June 19th 2017 Week 25th Monday
    June 18th 2017 Week 25th Sunday
    June 17th 2017 Week 24th Saturday
  • 原文地址:https://www.cnblogs.com/xieshuang/p/5660858.html
Copyright © 2011-2022 走看看