问题描述:
springMVC跨服务器文件上传,一直报错定位到PUT。
错误类型:403
tomcat服务器默认readonly属性为true。这样服务器会拒绝写入文件,就是403错误了。
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
解决方法:找到本地tomcat服务器存储位置,修改apache-tomcat-8.0.50\conf下的web.xml文件。
添加readonly属性false
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>readonly</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
错误类型:409
这个错误是因为写入路径在文件服务器中不存在。
/**
* 跨服务器文件上传
* @param file2
* @return
*/
@RequestMapping("fileUpload2")
public String fileUpload2(MultipartFile file2) throws IOException {
//文件服务器的写入路径
String serverPath = "http://localhost:9090/fileAccept/files/";
//文件原始名称
String filename = file2.getOriginalFilename();
//唯一标识,防治重复命名
String replace = UUID.randomUUID().toString().replace("-", "");
filename = replace+"_"+filename;
// 创建客户端的对象
Client client = Client.create();
// 和文件服务器进行连接
WebResource resource = client.resource(serverPath+filename);
// 上传文件
resource.put(file2.getBytes());
return "success";
}
这里的写入路径为“http://localhost:9090/fileAccept/files/”。在文件服务器中就需要存在这个文件夹。这里特别注意,这个文件夹需要在服务器工作空间存在。只在webapp下创建是不行的,要保证在target下存在这个文件夹。