SpringMVC跨服务器上传文件中出现405错误的解决

目录

  • SpringMVC跨服务器上传文件中出现405错误
  • 重点来了~

SpringMVC跨服务器上传文件中出现405错误 下面是 应用服务器 的代码
package com.itheima.controller; import com.sun.jersey.api.client.Client; import com.sun.jersey.api.client.WebResource; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; import java.io.File; import java.util.List; import java.util.UUID; @Controller@RequestMapping("/user")public class UserController { @RequestMapping("/fileupload3")public String fileupload3(MultipartFile upload) throws Exception{System.out.println("跨服务器文件上传...."); //定义上传文件服务器的路径String path = "http://localhost:9090/uploads/"; System.out.println(upload.getBytes()); //定义上传文件项//获取上传文件的名称String filename = upload.getOriginalFilename(); //把文件的名称设置成唯一值,uuidString uuid = UUID.randomUUID().toString().replace("-",""); filename = uuid + "_" + filename; //创建客户端对象Client client = Client.create(); //和图片服务器进行连接WebResource webResource = client.resource(path + filename); //相当于创建一个连接对象 //上传文件按webResource.put(upload.getBytes()); return "success"; } /*** SpringMVC文件上传* @return*/@RequestMapping("/fileupload2")public String fileuoload2(HttpServletRequest request, MultipartFile upload) throws Exception {System.out.println("springmvc文件上传..."); // 使用fileupload组件完成文件上传// 上传的位置String path = request.getSession().getServletContext().getRealPath("/uploads/"); // 判断,该路径是否存在File file = new File(path); if(!file.exists()){// 创建该文件夹file.mkdirs(); } // 说明上传文件项// 获取上传文件的名称String filename = upload.getOriginalFilename(); // 把文件的名称设置唯一值,uuidString uuid = UUID.randomUUID().toString().replace("-", ""); filename = uuid+"_"+filename; // 完成文件上传upload.transferTo(new File(path,filename)); return "success"; } /*** 文件上传* @return*/@RequestMapping("/fileupload1")public String fileuoload1(HttpServletRequest request) throws Exception {System.out.println("文件上传..."); // 使用fileupload组件完成文件上传// 上传的位置String path = request.getSession().getServletContext().getRealPath("/uploads/"); // 判断,该路径是否存在File file = new File(path); if(!file.exists()){// 创建该文件夹file.mkdirs(); } // 解析request对象,获取上传文件项DiskFileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload upload = new ServletFileUpload(factory); // 解析requestList items = upload.parseRequest(request); // 遍历for(FileItem item:items){// 进行判断,当前item对象是否是上传文件项if(item.isFormField()){// 说明普通表单向}else{// 说明上传文件项// 获取上传文件的名称String filename = item.getName(); // 把文件的名称设置唯一值,uuidString uuid = UUID.randomUUID().toString().replace("-", ""); filename = uuid+"_"+filename; // 完成文件上传item.write(new File(path,filename)); // 删除临时文件item.delete(); }} return "success"; } }

【SpringMVC跨服务器上传文件中出现405错误的解决】springmvc.xml

success.jsp
Title - 锐客网上传文件成功

web.xml
Archetype Created Web Application dispatcherServletorg.springframework.web.servlet.DispatcherServletcontextConfigLocationclasspath:springmvc.xml1dispatcherServlet/ defaultorg.apache.catalina.servlets.DefaultServletdebug0listingstrue1 characterEncodingFilterorg.springframework.web.filter.CharacterEncodingFilterencodingUTF-8characterEncodingFilter/*

index.jsp
文件上传 - 锐客网传统文件上传
选择文件:
SpringMVC文件上传
选择文件:
跨服务器上传文件
选择文件:
查看request.getSession().getServletContext().getRealPath("\uploads\")的值

SpringMVC跨服务器上传文件中出现405错误的解决
文章图片

如果遇到报错405,PUT http://localhost:9090/uploads/.........
只需要在文件服务器中的 web.xml 中加入下面的代码
defaultorg.apache.catalina.servlets.DefaultServletdebug0readonlyfalselistingsfalse1


重点来了~ idea中springmvc跨服务器上传文件报405错误,修改了web.xml一样报错
这个问题是因为你使用的文件服务器的Tomcat使用的是exploded模式部署,修改的Tomcat本地conf下的web.xml对exploded的项目没有生效,此时应该使用war包模式进行部署,本地修改的web.xml文件继续保持修改状态,并且修改Application context不为/,可以修改为:/+任意文件名
然后再重新部署一下Tomcat服务器,此时不再报错。(注意要修改一下代码中的文件上传路径)
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

    推荐阅读