zoukankan      html  css  js  c++  java
  • SpringMVC实现ajax文件上传

    SpringMVC实现文件上传,直接上代码:

    后台代码:

    01 @RequestMapping(value = "/uploadApk")
    02 @ResponseBody
    03 public Object uploadApk(
    04         @RequestParam(value = "apkFile") MultipartFile apkFile,
    05         HttpServletRequest request, HttpServletResponse response) {
    06     Map<String,Object> resMap = new HashMap<String,Object>();
    07     if (apkFile != null) {
    08         //获取保存的路径,
    09         String realPath = request.getSession().getServletContext()
    10                 .getRealPath("/upload/apk");
    11         if (apkFile.isEmpty()) {
    12             // 未选择文件
    13             resMap.put("status", StatusConstants.STATUS_PARM_IS_EMPTY);
    14         } else{
    15             // 文件原名称
    16             String originFileName = apkFile.getOriginalFilename();
    17             try {
    18                 //这里使用Apache的FileUtils方法来进行保存
    19                 FileUtils.copyInputStreamToFile(apkFile.getInputStream(),
    20                         new File(realPath, originFileName));
    21                 resMap.put("status",StatusConstants.STATUS_OK);
    22             } catch (IOException e) {
    23                 System.out.println("文件上传失败");
    24                 resMap.put("status", StatusConstants.STATUS_EXECPTION);
    25                 e.printStackTrace();
    26             }
    27         }
    28  
    29     }
    30     return resMap;
    31 }

    Spring配置文件中需要添加如下内容:

    01 <!-- SpringMVC上传文件时,需配置MultipartResolver处理器 -->
    02 <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    03     <!-- 指定所上传文件的总大小不能超过80M......注意maxUploadSize属性的限制不是针对单个文件,而是所有文件的容量之和 -->
    04     <property name="maxUploadSize" value="80000000"/>
    05 </bean>
    06   
    07 <!-- SpringMVC在超出上传文件限制时,会抛出org.springframework.web.multipart.MaxUploadSizeExceededException -->
    08 <!-- 该异常是SpringMVC在检查上传的文件信息时抛出来的,而且此时还没有进入到Controller方法中 -->
    09 <bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
    10     <property name="exceptionMappings">
    11         <props>
    12             <!-- 遇到MaxUploadSizeExceededException异常时,自动跳转到/WEB-INF/jsp/error_fileupload.jsp页面 -->
    13             <prop key="org.springframework.web.multipart.MaxUploadSizeExceededException">error_fileupload</prop>
    14         </props>
    15     </property>
    16 </bean>

    jsp页面内容(这里结合的EasyUi的一些内容):

    01 function ajaxFileUpload(){
    02     //获取软件更新详情
    03     var apkIntroduce = $("#apkInfo").val();
    04     //开始上传文件时显示一个图片,文件上传完成将图片隐藏
    05     //$("#loading").ajaxStart(function(){$(this).show();}).ajaxComplete(function(){$(this).hide();});
    06     //执行上传文件操作的函数,使用encodeURI方法,防止传输中文字符的时候出现乱码
    07     var uploadUrl = encodeURI(encodeURI(basePath + "uploadApk.do?apkIntroduce="+apkIntroduce));
    08     $.ajaxFileUpload({
    09         //处理文件上传操作的服务器端地址(可以传参数,已亲测可用)
    10         url:uploadUrl,
    11 //      url:basePath + "uploadApk.do?apkIntroduce="+apkIntroduce,
    12         secureuri:false,                       //是否启用安全提交,默认为false
    13         fileElementId:'apkFile',           //文件选择框的id属性
    14         dataType:'text',                       //服务器返回的格式,可以是json或xml等
    15         success:function(data, status){        //服务器响应成功时的处理函数
    16             data = data.replace("<PRE>", '');  //ajaxFileUpload会对服务器响应回来的text内容加上<pre>text</pre>前后缀
    17             data = data.replace("</PRE>", '');
    18             data = data.replace("<pre>", '');
    19             data = data.replace("</pre>", ''); //本例中设定上传文件完毕后,服务端会返回给前台[0`filepath]
    20              
    21             //将String字符串转换成json
    22             var dataset = $.parseJSON(data);
    23             if(dataset.status == "ok"){
    24                 $('#result').html("Apk上传成功
    25 ");
    26                 $.messager.alert("提示","上传成功");
    27                  
    28                 //关闭添加窗口
    29                 addApkWindow.window('close');
    30                 //刷新页面
    31                 datagrid.datagrid('reload');
    32                  
    33             }else if ( dataset.status == "parm_is_empty"){
    34                 $('#result').html("没有选择APK!");
    35             }else {
    36                 $('#result').html('Apk上传失败,请重试!!');
    37             }
    38         },
    39         error:function(data, status, e){ //服务器响应失败时的处理函数
    40             console.log(e);
    41             console.log(data);
    42             $('#result').html('APK上传失败,请重试!!');
    43         }
    44     });
    45 }

    Html页面代码:

    01     <div id="addApkWindows">
    02      
    04         <div id="result"></div>
    05 <!--         <img id="uploadImage" src="http://www.firefox.com.cn/favicon.ico"> -->
    06         软件更新详情:
    07  
    08         <textarea rows="2" cols="30" id="apkInfo"></textarea>
    09          
    10 上传文件:
    11  
    12         <input type="file" id="apkFile" name="apkFile"/>
    13  
    14         <input type="button" value="上传" onclick="ajaxFileUpload()"/>
    15  
    16     </div>

    上面的JSP代码中,使用到了JS中的encodeURI方法,这个的目的是为了防止在传递中文参数时的乱码问题,当然,如果只传文件的话,则没有必要使用encodeURI

  • 相关阅读:
    代码审计变成CTF
    updatexml()报错注入
    一道综合渗透题引发的updatexml()注入思考
    Visual Studio 调试技巧---指针,元素个数
    在Visual Studio中调试时,如何检查有关进程令牌的详细信息?
    在调试时,有什么更好的方法可以监视最后一个win32错误?
    从WinDbg中的转储查看操作系统版本和SP详细信息
    可以使用WinDbg将PE映像作为转储文件打开
    常见WinDbg问题及解决方案
    在崩溃转储中查找所有可能的上下文记录
  • 原文地址:https://www.cnblogs.com/shangxiaofei/p/5369789.html
Copyright © 2011-2022 走看看