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

网友投稿 260 2022-12-03

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();

//把文件的名称设置成唯一值,uuid

String 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();

// 把文件的名称设置唯一值,uuid

String 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);

// 解析request

List items = upload.parseRequest(request);

// 遍历

for(FileItem item:items){

// 进行判断,当前item对象是否是上传文件项

if(item.isFormField()){

// 说明普通表单向

}else{

// 说明上传文件项

// 获取上传文件的名称

String filename = item.getName();

// 把文件的名称设置唯一值,uuid

String uuid = UUID.randomUUID().toString().replace("-", "");

filename = uuid+"_"+filename;

// 完成文件上传

item.write(new File(path,filename));

// 删除临时文件

item.delete();

}

}

return "success";

}

}

springmvc.xml

xmlns:mvc="http://springframework.org/schema/mvc"

xmlns:context="http://springframework.org/schema/context"

xmlns:xsi="http://w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="

http://springframework.org/schema/beans

http://springframework.org/schema/beans/spring-beans.xsd

http://springframework.org/schema/mvc

http://springframework.org/schema/mvc/spring-mvc.xsd

http://springframework.org/schema/context

http://springframework.org/schema/context/spring-context.xsd">

xmlns:mvc="http://springframework.org/schema/mvc"

xmlns:context="http://springframework.org/schema/context"

xmlns:xsi="http://w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="

http://springframework.org/schema/beans

http://springframework.org/schema/beans/spring-beans.xsd

http://springframework.org/schema/mvc

http://springframework.org/schema/mvc/spring-mvc.xsd

http://springframework.org/schema/context

http://springframework.org/schema/context/spring-context.xsd">

success.jsp

<%--

Created by IntelliJ IDEA.

User: Administrator

Date: 2018/5/4

Time: 21:58

To change this template use File | Settings | File Templates.

--%>

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

web.xml

xmlns="http://java.sun.com/xml/ns/j2ee"

xmlns:xsi="http://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">

Archetype Created Web Application

dispatcherServlet

org.springframework.web.servlet.DispatcherServlet

contextConfigLocation

classpath:springmvc.xml

1

dispatcherServlet

/

default

org.apache.catalina.servlets.DefaultServlet

debug

0

listings

true

1

characterEncodingFilter

org.springframework.web.filter.CharacterEncodingFilter

encoding

UTF-8

characterEncodingFilter

/*

xmlns="http://java.sun.com/xml/ns/j2ee"

xmlns:xsi="http://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">

Archetype Created Web Application

dispatcherServlet

org.springframework.web.servlet.DispatcherServlet

contextConfigLocation

classpath:springmvc.xml

1

dispatcherServlet

/

default

org.apache.catalina.servlets.DefaultServlet

debug

0

listings

true

1

characterEncodingFilter

org.springframework.web.filter.CharacterEncodingFilter

encoding

UTF-8

characterEncodingFilter

/*

index.jsp

<%--

Created by IntelliJ IDEA.

User: QHC

Date: 2019/10/9

Time: 13:49

To change this template use File | Settings | File Templates.

--%>

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<%--不知道为啥,在台式机可以跑成功,在笔记本就报错,难道是tomcat的版本的原因?--%>

选择文件:

选择文件:

选择文件:

查看request.getSession().getServletContext().getRealPath("\uploads\")的值

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

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

default

org.apache.catalina.servlets.DefaultServlet

debug

0

readonly

false

listings

false

1

重点来了~

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

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

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

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:java 如何为文件及文件夹添加权限
下一篇:浅谈Java锁机制
相关文章

 发表评论

暂时没有评论,来抢沙发吧~