SpringMVC跨服务器上传文件报错:403和409

文章目录

  • 409
  • 403
    • 1.出错原因
    • 2.解决方法

409

409:该错误是文件服务器没有upload这个文件夹,在target目录下添加该文件夹即可。
在这里插入图片描述
SpringMVC跨服务器上传文件报错:403和409_第1张图片

403

403:因为所使用的文件服务器,单纯用来存储文件,还未进行其他配置,未配置支持文件写入所以出现问题。
SpringMVC跨服务器上传文件报错:403和409_第2张图片

type Exception report

message Request processing failed; nested exception is com.sun.jersey.api.client.UniformInterfaceException: PUT http://localhost:8081/upload/9db4b8ee5ea24a258be95ec7ae5441ae_tupain.jpg returned a response status of 403 Forbidden

description The server encountered an internal error that prevented it from fulfilling this request.

exception

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is com.sun.jersey.api.client.UniformInterfaceException: PUT http://localhost:8081/upload/9db4b8ee5ea24a258be95ec7ae5441ae_tupain.jpg returned a response status of 403 Forbidden
	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:650)
	org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:855)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
	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:8081/upload/9db4b8ee5ea24a258be95ec7ae5441ae_tupain.jpg returned a response status of 403 Forbidden
	com.sun.jersey.api.client.WebResource.voidHandle(WebResource.java:709)
	com.sun.jersey.api.client.WebResource.put(WebResource.java:208)
	com.ginger.controller.DownloadController.testSpringMVCFileUploadToServer(DownloadController.java:134)
	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:650)
	org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:855)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
	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)

note The full stack trace of the root cause is available in the Apache Tomcat/7.0.70 logs.

1.出错原因

文件服务器缺少允许文件读写的配置,直接把web.xml文件部分,添加配置信息即可解决。

扩展:在tomcat5.5支持http delete和put的方法,Tomcat版本是8版本的,它是不允许delete和put操作。

2.解决方法

在图片服务器中的apache-tomcat-7.0.70\conf\web.xml配置文件中找到org.apache.catalina.servlets.DefaultServlet加上下面的配置:

扩展:配置tomcat支持http delete和put的方法
WebDAV(Web-based Distributed Authoring and Versioning)是基于 HTTP 1.1 的一个通信协议。它为 HTTP 1.1 添加了一些扩展(就是在 GET、POST、HEAD 等几个 HTTP 标准方法以外添加了一些新的方法),使得应用程序可以直接将文件写到 Web Server 上,并且在写文件时候可以对文件加锁,写完后对文件解锁,还可以支持对文件所做的版本控制。这个协议的出现极大地增加了 Web 作为一种创作媒体对于我们的价值。基于 WebDAV 可以实现一个功能强大的内容管理系统或者配置管理系统。

方法:
PUT,向指定的目录上传附加文件;
DELETE,删除指定的资源;
COPY,将指定的资源复制到Destination消息头指定的位置;
MOVE,将指定的资源移动到Destination消息头指定的位置;
SEARCH,在一个目录路径中搜索资源。
PROPFIND,获取与指定资源有关的信息,如作者、大小与内容类型。
TRACE,在响应中返回服务器收到的原始请求。可以使用这种方法避开阻止跨站点脚本的防御。
在tomcat5.5支持http delete和put的方法:

<init-param>
   <param-name>readonly</param-name>
   <param-value>false</param-value>
</init-param>

SpringMVC跨服务器上传文件报错:403和409_第3张图片
加入此行的含义是:接收文件的目标服务器可以支持写入操作。

扩展:readonly参数默认是true,即不允许delete和put操作,所以通过XMLHttpRequest对象的put或者delete方法访问就会报告http 403错误。为REST服务起见,应该设置该属性为false。

添加上述配置测试跨服务器上传,成功上传文件。

你可能感兴趣的:(Question)