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组件,逻辑还是非常清晰。但实际操作的时候还是非常可能出现一些奇葩异常,非常建议初学者动手敲一敲。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章