springMVC結合jersey實現跨服務器文件上傳

  1. 除了spring相關的依賴依賴,我們需要添加jersey的兩個相關依賴,版本信息可以不同。
    <dependency>
      <groupId>com.sun.jersey</groupId>
      <artifactId>jersey-client</artifactId>
      <version>1.19.4</version>
    </dependency>
    <dependency>
      <groupId>com.sun.jersey</groupId>
      <artifactId>jersey-core</artifactId>
      <version>1.19.4</version>
    </dependency>
  1. 在springmvc.xml文件中,配置文件解析器
<!--配置文件解析器-->
        <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
            <property name="maxUploadSize" value="10485760"></property>
        </bean>
  1. 編寫前端頁面。
<form action="file/fileServer8082" method="post" enctype="multipart/form-data">
        選擇文件:<input type="file" name="fileUpload"/>
        <br/>
        <input type="submit" value="上傳"/>
    </form>

因爲是跨服務器上傳,所以這裏我們需要搭建兩個tomcat環境,web用8081,文件服務器用8082。
文件服務器需要在tomcat安裝目錄的web.xml文件中加入初始化參數:readonly=false,否則上傳時可能會報403。

    <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>false</param-value>
        </init-param>
		<init-param>
			<param-name>readonly</param-name>
            <param-value>false</param-value>
		</init-param>
        <load-on-startup>1</load-on-startup>

    </servlet>
  1. 編寫前端控制器
    @RequestMapping("/fileServer8082")
    public  String doSpringMvcFileUpload(MultipartFile fileUpload) throws Exception {
        //聲明文件上傳服務器地址
        String path = "http://localhost:8082/uploads/";
        System.out.println(path);
        String fileName = fileUpload.getOriginalFilename();
        String uuid  = UUID.randomUUID().toString();
        fileName = uuid + "-" + fileName;
        //創建客戶端對象
        Client client = Client.create();
        //與文件服務器進行連接
        WebResource webResource = client.resource(path+fileName);
        //文件上傳
        webResource.put(fileUpload.getBytes());
        return "uploadSuccess";
    }
  1. 注意:上傳時還特別容易報409,原因是對應服務器目錄下沒有那個/uploads/文件目錄,這時需要手動創建一個。跨服務器文件上傳,相較於本地上傳,改動其實不算大,只需要添加jersey組件,邏輯還是非常清晰。但實際操作的時候還是非常可能出現一些奇葩異常,非常建議初學者動手敲一敲。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章