zoukankan      html  css  js  c++  java
  • spingMVC异步上传文件

    框架是个强大的东西,一般你能想到的,框架都会帮你做了,然后只需要会用就行了,spingmvc中有处理异步请求的机制,而且跟一般处理请求的方法差别不大,只是多了一个注解;spingmvc也可以将string、list、map转化成json数据;然后前台发起一个ajax请求,后台处理完成返回json数据,这就是异步上传文件的基本思路。

    1、springMVC处理异步请求配置

      首先是需要的jar包资源

      上传文件的jar:

      commons-fileupload-1.2.2.jar

      commons-io-2.4.jar

      json格式转换的jar:

      jackson-databind-2.5.4.jar

      jackson-core-2.5.4.jar

      jackson-annotations-2.5.0.jar

      导入Jackson的包之后,在控制器处理请求的方法中,就可以直接返回string、list、map,甚至可以是Map<String , List<String>>这样格式的数据,框架都会转换成json格式的数据返回给前台,因为springMVC内置就是使用Jackson来转换格式的,所以只需要导入jar包,框架就会帮我们自动转换成json格式的数据。例如,在控制器的方法中返回了这样的一个map  Map<String, List<String>> hashMap = new HashMap<String , List<String>>(); 返回到前台的格式就是:{"vals":["12136","896","128","10915"],"keys":["台区总数","一般警告","严重警告","正常台区"]}

      导入jar包资源之后还需要在springMVC的全局配置文件中配置文件上传的bean,如果用到了json数据格式转换也需要在全局配置文件中配置。

      上传文件需要的配置:

    <!-- 文件上传   设置文件大小限制 -->
        <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
            <property name="maxUploadSize">
                <value>5242880</value>
            </property>
            <!-- 设置默认的编码方式 -->
             <property name="defaultEncoding">  
                <value>UTF-8</value>  
            </property> 
        </bean>

      

      json格式转换的配置:

    <!-- 处理ajax请求,将返回的数据转为json -->
          <bean id="contentNegotiationManager" class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">
            <property name="favorPathExtension" value="false" />
          </bean>
        <bean id="jsonConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"></bean>  
    
        <bean id="stringConverter"  
            class="org.springframework.http.converter.StringHttpMessageConverter">  
            <property name="supportedMediaTypes">  
                <list>  
                    <value>text/plain;charset=UTF-8</value>  
                </list>  
            </property>  
        </bean>  
    
        <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">  
            <property name="messageConverters">  
                <list>  
                    <ref bean="stringConverter" />  
                    <ref bean="jsonConverter" />  
                </list>  
            </property>  
        </bean> 

    2、前台的ajax请求

      前台使用ajax发起异步请求,思路:异步请求肯定是js来提交请求,但是这里的输入的内容是一个文件,可以使用H5中的Formdata对象,然后通过js获取到input中的值放到Formdata中,然后把Formdata传到后台。

      具体代码如下:

    $("#importDetialDataExcel").click(function(){
            var detailDataExcel = document.detailDataForm.detailDataExcel.files[0];
            var myForm = new FormData();
            myForm.append("detailDataExcel",detailDataExcel);
            $("#detailDataState").text("上传中...");
            ajaxImport(myForm,"uploadDetailData.shtml","#detailDataState");
        });
        
        // 用于发起异步请求
        function ajaxImport(myForm,myurl,state) {
            $.ajax({
                url : myurl,
                type : "post",
                data : myForm,
                dataType : 'json',
                contentType : false, // 禁止设置请求类型
                processData : false, // 禁止jquery对DAta数据的处理,默认会处理
                // 禁止的原因是,FormData已经帮我们做了处理
                success : function(result) {
                    // alert(result.result);
                    showMsg('文件' + result.result + '上传成功', 'bottom');
                    $(state).text("已上传");
                },
                error : function(data) {
                    showMsg('文件上传失败', 'bottom');
                    $(state).text("上传失败");
                }
            });
        }

      

    3、spingmvc控制器中的方法

      数据到了后台处理方式和平时差别不大,只需要在方法前加一个@ResponseBody注解,这样返回的数据格式就是json格式,值得注意的是在方法的参数中,对象的类型就是MultipartFile,名称必须和ajax请求参数中的名称一致,detailDataExcel,也就是放入到Formdata中的参数名。接收到文件后写入到本地磁盘或者作其他处理。

      具体代码如下:

    @RequestMapping("uploadDetailData.shtml")
        @ResponseBody
        public  Map<String, String> importDetailDataExcel(MultipartFile detailDataExcel)
                throws RuntimeException, IOException {
            Map<String, String> mapResult = new HashMap<String, String>(); // 新建map向客户端返回数据
            if (!detailDataExcel.isEmpty()) {
                // 设置文件上传保存的路径
                String path = "D:\java\workSpace\ElectricSystem\upload\detailData\";
                String originFileName = detailDataExcel.getOriginalFilename(); // 获取文件的原始文件名
                File file = new File(path + originFileName);
                detailDataExcel.transferTo(file); // 将文件写入磁盘
                mapResult.put("result", originFileName);
            }
            return mapResult;
        }

      

  • 相关阅读:
    Silverlight 动态调用 WebService
    一步一步学Silverlight 2系列(28):图片处理
    一步一步学Silverlight 2系列(27):使用Brush进行填充
    HTML5 Web Applications
    分享31个非常有用的 HTML5 教程
    数学分析原理 定理 6.5
    数学分析原理 定理 6.9
    RiemannStieltjes积分存在的充分条件(按照Tom M.Apostol的《数学分析》上的定义)
    数学分析原理 定理 6.4
    数学分析原理 定理 6.8
  • 原文地址:https://www.cnblogs.com/hello-daocaoren/p/7465368.html
Copyright © 2011-2022 走看看