使用jersey组件向图片资源服务器上传图片报405 Method Not Allowed错误

报错信息大致如下:
在这里插入图片描述
按照B站教程学习springmvc框架
B站springmvc教程
照着老师思路配置和部署的.

环境:WIN7 IDEA tomcat9.0.6 jdk1.8
1.除了spring全家桶之外相关包引入:

    <!--文件上传组件-->
    <dependency>
      <groupId>commons-fileupload</groupId>
      <artifactId>commons-fileupload</artifactId>
      <version>1.3.1</version>
    </dependency>
    <dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
      <version>2.4</version>
    </dependency>
    <!--文件上传组件结束-->

    <!--用于跨服传文件(向文件服传输文件)-->
    <dependency>
      <groupId>com.sun.jersey</groupId>
      <artifactId>jersey-core</artifactId>
      <version>1.18.1</version>
    </dependency>
    <dependency>
      <groupId>com.sun.jersey</groupId>
      <artifactId>jersey-client</artifactId>
      <version>1.18.1</version>
    </dependency>
    <!--用于跨服传文件(向文件服传输文件) 结束-->

2.springmvc.xml:

<context:component-scan base-package="com.chenmual.controller"></context:component-scan>
	<!-- 激活基于注解的配置 -->
	<mvc:annotation-driven />
	<!--文件解析器对象, 用于解析上传文件upload的,要求id必须为multipartResolver-->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!--最大文件大小-->
        <property name="maxUploadSize" value="10485760" />
    </bean>
	<!-- 静态资源配置 SpringMVC3.0 -->
    <mvc:default-servlet-handler />
    <!-- 视图层配置 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/pages/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
    <!--文件解析器对象, 用于解析上传文件upload的,要求id必须为multipartResolver-->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!--最大文件大小-->
        <property name="maxUploadSize" value="10485760" />
    </bean>

3.web.xml相关配置:

    <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/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>

4.index.jsp(三种上传方式 前两种是同服务器,第3种是跨服):

<body>
    <a href="/user/test2">test</a>
    <h1>传统文件上传</h1>
    <form action="/user/fileupload1" method="post" enctype="multipart/form-data">
        选择文件:<input type="file" name="upload" /><br/>
        <input type="submit" value="上传" />
    </form>
    <br/>
    <h2>springmvc文件上传</h2>
    <form action="/user/fileupload2" method="post" enctype="multipart/form-data">
        选择文件:<input type="file" name="upload" /><br/>
        <input type="submit" value="上传" />
    </form>
    <h3>跨服务器上传</h3><br/>
    <form action="/user/fileupload3" method="post" enctype="multipart/form-data">
        选择文件:<input type="file" name="upload" /><br/>
        <input type="submit" value="上传" />
    </form>
</body>

4.相关controller:

@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping("/fileupload3")
	//fileupload1和2都是好使的这里不赘述了 只保留fileupload3
	@RequestMapping("/fileupload3")
	public String fileupload3(MultipartFile upload) throws Exception {
		System.out.println("fileupload3");
		//定义上传服务器的路径
		String path = "http://localhost:9090/uploads/";
		String filename = upload.getOriginalFilename();
		//把文件名称设置成唯一值, uuid
		String str = UUID.randomUUID().toString().replace("-", "");
		filename = str + "_" + filename;
		//创建客户端的对象
		Client client = Client.create();
		//和文件服务器进行链接
		WebResource webResource = client.resource(path +  filename);
		//上传文件
		webResource.put(upload.getBytes());
		return "success";
	}
}

这里再说明一下情况:
前面传统上传文件和springmvc上传是好使的 上传文件也都存在于相应的uploads文件夹下
第3种是新建另一个服务器作为存图片服 使用jersey组件把文件上传到新服上(新的服几乎没有任何配置)

网上百度405资料.有说post方式不对,我把webResource.put改成了post/get都不好使,应该不是这个问题
后来一篇文章提出 改一下tomcat权限.为我提供了新思路,于是百度tomcat相关配置.最后找到了另一篇文章
说的是在tomcat目录把只读关掉
相关配置(在tomcat/conf/web.xml中加):

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

当然最后还报了一个409的错误.
我在项目目录/target/项目目录/下加了个uploads文件夹就好使了

评论 14
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值