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

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

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

  1. * <p><b>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.</b>
  3. * So typically, put a Spring {@link org.springframework.web.multipart.support.MultipartFilter}
  4. * <i>before</i> 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. <filter>
    2. <filter-name>MultipartFilter</filter-name>
    3. <filter-class>org.springframework.web.multipart.support.MultipartFilter</filter-class>
    4. </filter>
    5. <filter-mapping>
    6. <filter-name>MultipartFilter</filter-name>
    7. <servlet-name>dispatcher</servlet-name>
    8. </filter-mapping>
    9.  
    10. <filter>
    11. <filter-name>HiddenHttpMethodFilter</filter-name>
    12. <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
    13. </filter>
  2. 然后再在Spring的 root application context中添加如下代码

    1. <bean id="filterMultipartResolver"
    2. class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    3. <property name="maxUploadSize" value="209715200"/>
    4. <property name="defaultEncoding" value="UTF-8"/>
    5. <property name="resolveLazily" value="true"/>
    6. </bean>
  3. FormData对象是html5的一个对象,目前的一些主流的浏览器都已经兼容。FormData对象是html5的一个对象,目前的一些主流的浏览器都已经兼容。

    1. function test() {
    2. var form = new FormData(document.getElementById("tf"));
    3. form.append("_method", 'put');
    4. $.ajax({
    5. url: url,
    6. type: 'post',
    7. data: form,
    8. processData: false,
    9. contentType: false,
    10. success: function (data) {
    11. window.clearInterval(timer);
    12. console.log("over..");
    13. },
    14. error: function (e) {
    15. alert("错误!!");
    16. window.clearInterval(timer);
    17. }
    18. });
    19. get();//此处为上传文件的进度条
    20. }
    21. <form id="tf" method="post" name="formDada" enctype="multipart/form-data">
    22. <input type="file" name="file"/>
    23. <input type="text" name="id"/>
    24. <input type="text" name="name"/>
    25. <input type="button" value="提" onclick="test()"/>
    26. </form>

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

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

  1. <filter>
  2. <filter-name>multipartFilter</filter-name>
  3. <filter-class>org.springframework.web.multipart.support.MultipartFilter</filter-class>
  4. <init-param>
  5. <param-name>multipartResolverBeanName</param-name>
  6. <param-value>multipartResolver</param-value>
  7. </init-param>
  8. </filter>
  9. <filter-mapping>
  10. <filter-name>multipartFilter</filter-name>
  11. <url-pattern>/*</url-pattern>
  12. </filter-mapping>

SpringMVC-实现PUT请求上传文件(转)的更多相关文章

  1. SpringMVC实现PUT请求上传文件

    在JQuery中,我们可以进行REST ful中delete和put的请求,但是在java EE标准中,默认只有在POST请求的时候,servlet 才会通过getparameter()方法取得请求体 ...

  2. SSM框架下,使用ajax请求上传文件(doc\docx\excel\图片等)

    1.准备工作 1.1.添加上传必要jar包 <dependency> <groupId>commons-io</groupId> <artifactId> ...

  3. Postman Post请求上传文件

    Postman Post请求上传文件一.选择post请求方式,输入请求地址 二.填写Headers Key:Content-Type :Value:multipart/form-data 如下图 三. ...

  4. python中使用multipart/form-data请求上传文件

    最近测试的接口是上传文件的接口,上传单个文件,我主要使用了2种方法~ 接口例如: URL: http://www.baidu.com/*** method:post 参数: { "salar ...

  5. element-ui上传组件,通过自定义请求上传文件

    记录使用element-ui上传组件,通过自定义请求上传文件需要注意的地方. <el-upload ref="uploadMutiple" :auto-upload=&quo ...

  6. JAVA模拟HTTP post请求上传文件

    在开发中,我们使用的比较多的HTTP请求方式基本上就是GET.POST.其中GET用于从服务器获取数据,POST主要用于向服务器提交一些表单数据,例如文件上传等.而我们在使用HTTP请求时中遇到的比较 ...

  7. springMVC+spring+hibernate注解上传文件到数据库,下载,多文件上传

    数据库 CREATE TABLE `annex` ( `id` bigint() NOT NULL AUTO_INCREMENT, `realName` varchar() DEFAULT NULL, ...

  8. upload三种上传方式(上)---Servlet---post---commons-fileupload.1.2.1.jar方式请求上传文件

    上传前进行的配置选项: 1.在下方的Servers中,右键你的tomcat--open,选中下面两个配置. 第一个:Serve modules without publishing 作用:tomcat ...

  9. 通过PHP CURL模拟请求上传文件|图片。

    现在有一个需求就是在自己的服务器上传图片到其他服务器上面,过程:客户端上传图片->存放到本地服务器->再转发到第三方服务器; 由于前端Ajax受限制,只能通过服务器做转发了. 在PHP中通 ...

  10. 通过POST请求上传文件

    转自:https://blog.csdn.net/zhangge3663/article/details/81218488 理论 简单的HTTP POST 大家通过HTTP向服务器发送POST请求提交 ...

随机推荐

  1. 文本框只允许输入数字.net/javascript

    <input type="text" name="test" onKeyUp="test1.value=(this.value=this.val ...

  2. 现有分布式技术(socket、.net remoting、asp.net webservice、WSE、ES)和wcf的比较及优势

    1:socket VS remoting 使用socket无疑是效率最高的.但是,在复杂的接口环境下,socket的开发效率也是最低的.故在兼顾开发效率的情况下,可以使用remoting来代替sock ...

  3. windows常用命令行总结

    cmd下的命令行 1.查看当前目录下的子目录 dir   或 dir /b 类似Linux 下的  ls 或者 ls -l 2.盘符切换  d: 3.进入目录 cd [目录名] 退一个目录 cd .. ...

  4. html:option

    注意事项: (1):In HTML the <option> tag has no end tag.HTML中<option>标签不需要关闭.In XHTML the < ...

  5. vue安装--使用node

    总结: # 全局安装 vue-cli $ npm install --global vue-cli # 创建一个基于 webpack 模板的新项目 $ vue init webpack my-proj ...

  6. python socket练习

    服务器端 #服务器端 import socket server = socket.socket() server.bind(('localhost',6969))#绑定要监听的端口 server.li ...

  7. 用SQL将数字转换为中文数字

    IF OBJECT_ID('fn_GetChnNum') IS NOT NULL BEGIN DROP FUNCTION dbo.fn_GetChnNum; END; GO CREATE FUNCTI ...

  8. Altium_Designer-各种布线总结

    1.常规布线:不详细说了,是个人就知道怎么弄.需要说明的是在布线过程中,可按小键盘的*键或大键盘的数字2键添加一个过孔:按L键可以切换布线层:按数字3可设定最小线宽.典型线宽.最大线宽的值进行切换. ...

  9. hdu-3015 Disharmony Trees---离散化+两个树状数组

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3015 题目大意: 有一些树,这些树的高度和位置给出.现在高度和位置都按从小到大排序,对应一个新的ra ...

  10. 【BZOJ3506】[CQOI2014] 排序机械臂(Splay)

    点此看题面 大致题意: 给你\(n\)个数.第一次找到最小值所在位置\(P_1\),翻转\([1,P_1]\),第二次找到剩余数中最小值所在位置\(P_2\),翻转\([2,P_2]\),以此类推.求 ...