SpringMVC跨服务器上传文件—com.sun.jersey.api.client.UniformInterfaceException:404

SpringMVC跨服务器上传文件

1. 首先要保证上传的位置存在,否则会报409错误
  比如:我要上传到 uploads 文件夹下,那么就在 target 目录下,找到以项目名命名的文件夹,在里面创建一个 uploads 文件夹
2. 跨服务器上传文件需要用到两个 jar 包,在 maven 中导入坐标

<!--跨服务器文件上传-->
<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>

3. 使用 jar 包中的类上传

public String fileUpLoad3(MultipartFile upload) throws Exception {
   System.out.println("springmvc跨服务器上传文件...");

   // 上传的文件路径
   String path = "http://localhost:9090/uploads/";

   // 获取上传文件的名字
   String fileName = upload.getOriginalFilename();
   String uuid = UUID.randomUUID().toString().replaceAll("-", "");
   fileName = uuid + "_" + fileName;

   // 创建客户端的对象
   Client client = Client.create();
   // 和图片服务器进行连接
   WebResource webResource = client.resource(path + fileName);
   // 上传文件
   webResource.put(upload.getBytes());

   return "success";
}
遇到的问题

在上传文件的过程中,遇到了异常:com.sun.jersey.api.client.UniformInterfaceException: PUT http://localhost:9090/uploads/e6637912e46f449889eed6ef19f83f70_girl8.jpg returned a response status of 404 Not Found。
在这里插入图片描述
我发生这个问题的原因是:web.xml 配置文件中配置了 DispatcherServleturl-pattern/,它会把所有的路径都拦截,包括静态资源。如果有小伙伴也发生这种错误,可以检查一下自己的 web.xml 文件。

解决办法
  1. web.xml 文件删除,自然就不会出现这种问题
  2. web.xml 文件中配置采用 tomcat 默认的 servlet 解析,但是一定要配在 dispatcherServlet 的前面
<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.jpg</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>
  1. springmvc.xml 中配置 <mvc:default-servlet-handler/>
疑惑

不知道为什么在 springmvc.xml 中配置 <mvc:resources mapping="/uploads/**" location="/uploads/"></mvc:resources> 不行,仍然报这种错误。如果有知道原因的小伙伴,请不吝赐教。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值