• 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) 同样能将文件保存到路径下面

  • 相关阅读:
    c#redis使用
    不安全的HTTP方法(渗透实验)
    arguments.callee弃用与webuploader
    多线程系列1:经典卖票
    终于确定了系统lsass.exe占用cpu的根本原因了,速度来看一看!![转载]
    edit响应键盘的“咚咚”声音去掉
    delphi资源文件制作及使用详解
    MySQL server has gone away错误的解决办法
    MySQL server has gone away的解决方法
    MySQL
  • 原文地址:https://www.cnblogs.com/xieshuang/p/5660858.html
Copyright © 2020-2023  润新知