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> 不行,仍然報這種錯誤。如果有知道原因的小夥伴,請不吝賜教。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章