SpringMVC-实现PUT请求上传文件(转)

因为在图片上传的时候使用的是二进制的方式上传,所以使用隐藏域进行方法转换方式失效,转方法:

https://www.cnblogs.com/morethink/p/6378015.html

 

可是后来我又有遇到另外一个需求那就是修改的时候需要传送文件到put方法中,于是这种方法就不可行了,但是我在HiddenHttpMethodFilter源码中看到这样一句话

1  * 

NOTE: This filter needs to run after multipart processing in case of a multipart 2 * POST request, due to its inherent need for checking a POST body parameter. 3 * So typically, put a Spring {@link org.springframework.web.multipart.support.MultipartFilter} 4 * before this HiddenHttpMethodFilter in your {@code web.xml} filter chain.

和MultipartFilter源码中这样的注释

1  /**
2      * Set the bean name of the MultipartResolver to fetch from Spring's
3      * root application context. Default is "filterMultipartResolver".
4      */

 

  1. 也就是说我们可以通过在web.xml中注册一个MultipartFilter,一定要在HiddenHttpMethodFilter之前

     1 
     2     MultipartFilter
     3     class>org.springframework.web.multipart.support.MultipartFilterclass>
     4 
     5 
     6     MultipartFilter
     7     dispatcher
     8 
     9 
    10 
    11     HiddenHttpMethodFilter
    12     class>org.springframework.web.filter.HiddenHttpMethodFilterclass>
    13 
  2. 然后再在Spring的 root application context中添加如下代码

    class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        
        
        
    
  3. FormData对象是html5的一个对象,目前的一些主流的浏览器都已经兼容。FormData对象是html5的一个对象,目前的一些主流的浏览器都已经兼容。

     function test() {
            var form = new FormData(document.getElementById("tf"));
            form.append("_method", 'put');
            $.ajax({
                url: url,
                type: 'post',
                data: form,
                processData: false,
                contentType: false,
                success: function (data) {
                    window.clearInterval(timer);
                    console.log("over..");
                },
                error: function (e) {
                    alert("错误!!");
                    window.clearInterval(timer);
                }
            });
            get();//此处为上传文件的进度条
        }
    

最后,就可以实现将文件上传提交给put方法。

 

我使用文章中的方法还是失败,修改web.xml中multipartfilter的mapping之后成功

 1 
 2     multipartFilter
 3     class>org.springframework.web.multipart.support.MultipartFilterclass>
 4     
 5         multipartResolverBeanName
 6         multipartResolver
 7     
 8 
 9 
10     multipartFilter
11     /*
12 

转载于:https://www.cnblogs.com/thyHome/p/9098061.html

你可能感兴趣的:(SpringMVC-实现PUT请求上传文件(转))