阅读 119

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

目录SpringMVC跨服务器上传文件中出现405错误重点来了~SpringMVC跨服务器上传文件中出现405错误下面是应用服务器的代码packagecom.itheima.controller...

目录
  • 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<FileItem> 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.xml

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:context="http://www.springframework.org/schema/context"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd"><!-- 开启注解扫描 --><context:component-scan base-package="com.itheima"/><!-- 视图解析器对象 --><bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/pages/"/><property name="suffix" value=".jsp"/></bean><!--前端控制器,哪些静态资源不拦截--><mvc:resources location="/css/" mapping="/css/**"/><mvc:resources location="/images/" mapping="/images/**"/><mvc:resources location="/js/" mapping="/js/**"/><!--前端控制器,哪些静态资源不拦截--><mvc:resources location="/css/" mapping="/css/**"/><mvc:resources location="/images/" mapping="/images/**"/><mvc:resources location="/js/" mapping="/js/**"/><!--配置文件解析器对象--><bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"><property name="maxUploadSize" value="10485760" /></bean><!-- 开启SpringMVC框架注解的支持 --><mvc:annotation-driven /></beans>

success.jsp

<%--Created by IntelliJ IDEA.User: AdministratorDate: 2018/5/4Time: 21:58To change this template use File | Settings | File Templates.--%><%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head><title>Title</title></head><body><h3>上传文件成功</h3></body></html>

web.xml

<?xml version="1.0" encoding="UTF-8"?><!--Licensed to the Apache Software Foundation (ASF) under one or morecontributor license agreements. See the NOTICE file distributed withthis work for additional information regarding copyright ownership.The ASF licenses this file to You under the Apache License, Version 2.0(the "License"); you may not use this file except in compliance withthe License. You may obtain a copy of the License athttp://www.apache.org/licenses/LICENSE-2.0Unless required by applicable law or agreed to in writing, softwaredistributed under the License is distributed on an "AS IS" BASIS,WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.See the License for the specific language governing permissions andlimitations under the License.--><!--- This is the Cocoon web-app configurations file-- $Id$--><!--suppress ALL --><web-app version="2.4"xmlns="http://java.sun.com/xml/ns/j2ee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"><display-name>Archetype Created Web Application</display-name><servlet><servlet-name>dispatcherServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>dispatcherServlet</servlet-name><url-pattern>/</url-pattern></servlet-mapping><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>true</param-value></init-param><load-on-startup>1</load-on-startup></servlet><!--配置解决中文乱码的过滤器--><filter><filter-name>characterEncodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param></filter><filter-mapping><filter-name>characterEncodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping></web-app>

index.jsp

<%--Created by IntelliJ IDEA.User: QHCDate: 2019/10/9Time: 13:49To change this template use File | Settings | File Templates.--%><%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head><title>文件上传</title></head><body><%--不知道为啥,在台式机可以跑成功,在笔记本就报错,难道是tomcat的版本的原因?--%><h3>传统文件上传</h3><form action="/user/fileupload1" method="post" enctype="multipart/form-data">选择文件:<input type="file" name="upload"/><br><input type="submit" value="上传"/></form><h3>SpringMVC文件上传</h3><form action="/user/fileupload2" method="post" enctype="multipart/form-data">选择文件:<input type="file" name="upload"/><br><input type="submit" value="上传"/></form><h3>跨服务器上传文件</h3><form action="/user/fileupload3" method="post" enctype="multipart/form-data">选择文件:<input type="file" name="upload" /><br/><input type="submit" value="上传" /></form><a href="/user/testGetRealPath" rel="external nofollow" >查看request.getSession().getServletContext().getRealPath("\uploads\")的值</a></body></html>

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

如果遇到报错405,PUT http://localhost:9090/uploads/.........

只需要在文件服务器中的 web.xml 中加入下面的代码

<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>readonly</param-name><param-value>false</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>


重点来了~

idea中springmvc跨服务器上传文件报405错误,修改了web.xml一样报错

这个问题是因为你使用的文件服务器的Tomcat使用的是exploded模式部署,修改的Tomcat本地conf下的web.xml对exploded的项目没有生效,此时应该使用war包模式进行部署,本地修改的web.xml文件继续保持修改状态,并且修改Application context不为/,可以修改为:/+任意文件名

然后再重新部署一下Tomcat服务器,此时不再报错。(注意要修改一下代码中的文件上传路径)

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。


文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐