【錯誤處理】上傳文件出錯returned a response status of 405 Method Not Allowed,400

異常

Type 異常報告

消息 Request processing failed; nested exception is com.sun.jersey.api.client.UniformInterfaceException: PUT http://localhost:9090/spring_file_server_war_exploded/upload/a19dfbef613d4127926c0ccd82881376_SnapShot_2020-03-17_15-51-14.png returned a response status of 405 Method Not Allowed

描述 服務器遇到一個意外的情況,阻止它完成請求。

Exception

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is com.sun.jersey.api.client.UniformInterfaceException: PUT http://localhost:9090/spring_day2_file_server_war_exploded/upload/a19dfbef613d4127926c0ccd82881376_SnapShot_2020-03-17_15-51-14.png returned a response status of 405 Method Not Allowed
	org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:986)
	org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:881)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
	org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:855)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
	org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200)
	org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
Root Cause

com.sun.jersey.api.client.UniformInterfaceException: PUT http://localhost:9090/spring_day2_file_server_war_exploded/upload/a19dfbef613d4127926c0ccd82881376_SnapShot_2020-03-17_15-51-14.png returned a response status of 405 Method Not Allowed
	com.sun.jersey.api.client.WebResource.voidHandle(WebResource.java:709)
	com.sun.jersey.api.client.WebResource.put(WebResource.java:208)
	com.qichun.controller.UserController.testUpload3(UserController.java:154)
	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	java.lang.reflect.Method.invoke(Method.java:498)
	org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:209)
	org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136)
	org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102)
	org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:871)
	org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:777)
	org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
	org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:991)
	org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:925)
	org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:978)
	org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:881)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
	org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:855)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
	org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200)
	org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
):注意 主要問題的全部 stack 信息可以在 server logs 裏查看

環境

  • tomcat8
  • win10
  • idea部署

問題描述

向服務器上傳文件報錯,狀態碼405,400。
可能出現問題:

  • tomcat不允許寫入請求a response status of 405 Method Not Allowed;
  • 上傳的文件出錯,常見的是文件名無法解析中文
  • 上傳的地址錯誤,拼錯URL

解決方法

  1. 修改tomcat的web.xml配置文件,允許http請求方法寫入文件
    找到tomcat安裝目錄,修改conf文件夾下的web.xml文件。
    在這裏插入圖片描述
<init-param>
            <param-name>readonly</param-name>
            <param-value>false</param-value>
</init-param>

參數釋義:
如果運行環境readonly(只讀),則tomcat會拒絕所有的HTTP的修改方法(如put,delete),默認爲true。

  <!--   readonly            Is this context "read only", so HTTP           -->
  <!--                       commands like PUT and DELETE are               -->
  <!--                       rejected?  [true]                              -->
  1. 上傳文件名引起的錯誤可以對文件名進行轉碼即可解決,可以先用非中文文件名的文件試一試。

  2. 通過輸出語句可以檢測上傳URL是否出錯,糾錯後再次嘗試。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章