Springmvc的文件上传以及跨服务器文件上传

Springmvc的文件上传以及跨服务器文件上传

  • 传统方式上传文件
  • SpringMVC上传文件
    • 在springmvc.xml中配置文件解析器
    • 在controller中上传文件
  • 跨服务器上传文件
    • 导入jar包
    • 上传文件

传统方式上传文件

  /*
    文件上传
     */

    @RequestMapping("/fileupload1")
    public String fileUpload1(HttpServletRequest request) throws Exception {
        System.out.println("文件上传...");
        //使用fileupload组件完成文件上传
        //上传的路径
        String path = request.getSession().getServletContext().getRealPath("/uploads/");
        //判断,该路径是否存在
        File file = new File(path);
        if(!file.exists()){
            //创建文件夹
            file.mkdirs();
        }
        //解析request对象,获取上传文件项
        DiskFileItemFactory factory = new DiskFileItemFactory();
        ServletFileUpload upload = new ServletFileUpload(factory);
        //解析request

        List<FileItem> items = upload.parseRequest(request);
        //遍历
        for(FileItem item:items){
            //进行判断,当前item对象是否是上传文件项
            if(item.isFormField()){
                //说明普通表单项
            }else{
                //说明上传文件项
                //获取上传文件的名称
                String filename = item.getName();
                //把文件设置唯一值,uuid
                String uuid = UUID.randomUUID().toString().replace("-", "");
                filename = uuid+"_"+filename;
                item.write(new File(path,filename));
                //删除临时文件
                item.delete();
            }
        }
  • 需要我们自己解析request对象,获得上传文件项
  • 同时需要我们删除上传文件时的临时文件

SpringMVC上传文件

在springmvc.xml中配置文件解析器

        <!--配置文件解析器-->
        <bean id="multipartResolver"
              class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
                <property name="maxUploadSize" value="10485760"/>
        </bean>

在controller中上传文件

  /*
    springmvc上传文件
     */
    @RequestMapping("/fileupload2")
    public String fileUpload2(HttpServletRequest request, MultipartFile upload) throws Exception {
        System.out.println("springmvc文件上传...");
        //使用fileupload组件完成文件上传
        //上传的路径
        String path = request.getSession().getServletContext().getRealPath("/uploads/");
        //判断,该路径是否存在
        File file = new File(path);
        if(!file.exists()){
            //创建文件夹
            file.mkdirs();
        }

        //说明上传文件项
        //获取上传文件的名称
        String filename = upload.getOriginalFilename();
        //把文件设置唯一值,uuid
        String uuid = UUID.randomUUID().toString().replace("-", "");
        filename = uuid+"_"+filename;

       upload.transferTo(new File(path,filename));

        return "success";
    }
  • 文件解析器会为我们解析request对象获得文件项
  • 通过MultipartFile ,获取文件项后简化了我们的代码

跨服务器上传文件

导入jar包


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

上传文件

   /*
    跨服务器上传文件
 */
    @RequestMapping("/fileupload3")
    public String fileUpload3(MultipartFile upload) throws Exception {
        System.out.println("跨服务器文件上传...");
        //定义上传文件服务器路径
        String path = "http://localhost:9090/fileuploadserver_war_exploded/uploads/";

        //说明上传文件项
        //获取上传文件的名称
        String filename = upload.getOriginalFilename();
        //把文件设置唯一值,uuid
        String uuid = UUID.randomUUID().toString().replace("-", "");
        filename = uuid+"_"+filename;
        //创建客户端对象
        Client client = Client.create();
        //和服务器连接
        WebResource webResource = client.resource(path + filename);
        //上传文件
        webResource.put(upload.getBytes());
        return "success";
    }
  • 需要创建客户端对象,同时连接到另一台服务器
  • 之后调用put方法实现上传文件

你可能感兴趣的:(Javaweb学习)