• SpringMVC学习03:文件上传


    SpringMVC学习03:文件上传

    文件上传的前提

    1. <form>表单的enctype属性取值必须是multipart/form-data,表示表单内容是分块的

    2. <form>表单的method属性取值必须是post,因为get有长度限制

    3. 提供一个<input>标签,type属性取值是file,用来上传文件

    4. 导入文件上传的相关jar包

      <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.3.1</version>
      </dependency>
      <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.4</version>
      </dependency>
      

    传统方式文件上传

    部署在Tomcat服务器上时,文件上传的目录在Tomcatapache-tomcat-8.5.43webapps项目名目录下

    /**
         * 传统方式文件上传
         * @param request
         * @return
         * @throws Exception
         */
        @RequestMapping(path = "/fileUpload1")
        public String fileUpload1(HttpServletRequest request) throws Exception {
            System.out.println("传统方式文件上传");
            //先获取要上传的文件目录
            String realPath = request.getSession().getServletContext().getRealPath("/uploads");
            //创建File对象,向该路径下上传文件
            File file = new File(realPath);
            //判断该路径是否存在,如果不存在,创建该路径
            if(!file.exists()){
                file.mkdirs();
            }
            //创建磁盘文件项工厂
            DiskFileItemFactory factory = new DiskFileItemFactory();
            ServletFileUpload upload = new ServletFileUpload(factory);
            //解析request对象
            List<FileItem> fileItems = upload.parseRequest(request);
            // 遍历
            for (FileItem fileItem : fileItems) {
                //判断文件项是普通表单项还是上传的文件
                if(fileItem.isFormField()){
    
                }else{
                    //获取上传文件的名称
                    String filename = fileItem.getName();
                    //把文件的名称设置唯一值,使用uuid
                    String uuid = UUID.randomUUID().toString().replace("-", "");
                    filename = uuid + filename;
                    //上传文件
                    fileItem.write(new File(file,filename));
                    //删除临时文件
                    fileItem.delete();
                }
            }
            return "success";
    }
    

    SpringMVC文件上传

    1. SpringMVC框架提供了MultipartFile对象,该对象表示上传的文件,要求变量名称必须和表单file标签的
      name属性名称相同

      <h1>SpringMVC文件上传</h1>
      <form action="file/fileUpload2" method="post" enctype="multipart/form-data">
          文件上传:<input type="file" name="fileUpload"><br>
          <input type="submit" value="上传文件">
      </form>
      
      /**
           * SpringMVC文件上传
           * @param request
           * @param fileUpload
           * @return
           * @throws Exception
           */
          @RequestMapping(path = "/fileUpload2")
          public String fileUpload2(HttpServletRequest request, MultipartFile fileUpload) throws Exception {
              System.out.println("SpringMVC文件上传");
              //先获取要上传的文件目录
              String realPath = request.getSession().getServletContext().getRealPath("/uploads");
              //创建File对象,向该路径下上传文件
              File file = new File(realPath);
              //判断该路径是否存在,如果不存在,创建该路径
              if(!file.exists()){
                  file.mkdirs();
              }
              //获取上传文件的名称
              String filename = fileUpload.getOriginalFilename();
              //把文件的名称设置唯一值,使用uuid
              String uuid = UUID.randomUUID().toString().replace("-", "");
              filename = uuid + filename;
              //上传文件
              fileUpload.transferTo(new File(file,filename));
              return "success";
      }
      
    2. 配置文件解析器对象,在SpringMVC.xml中添加配置

      <!--配置文件解析器,要求id必须是multipartResolver-->
          <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
              <property name="maxUploadSize" value="10485760"/><!--限制上传的文件大小-->
          </bean>
      

    SpringMVC实现跨服务器文件上传

    1. 搭建图片服务器

    2. 导入跨服务器所需的jar包,在pom.xml中添加依赖的坐标

      <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. 创建文件上传的jsp页面

      <h1>SpringMVC跨服务器文件上传</h1>
      <form action="file/fileUpload3" method="post" enctype="multipart/form-data">
          文件上传:<input type="file" name="fileUpload"><br>
          <input type="submit" value="上传文件">
      </form>
      
    4. 创建控制器

      /**
      * SpringMVC跨服务器方式的文件上传
      * @param request
      * @return
      * @throws Exception
      */
      @RequestMapping(value="/fileupload3")
      public String fileupload3(MultipartFile upload) throws Exception {
      	System.out.println("SpringMVC跨服务器方式的文件上传...");
      	// 定义图片服务器的请求路径
      	String path = "http://localhost:9090/springmvc_fileUpload/uploads/";
      	// 获取到上传文件的名称
      	String filename = upload.getOriginalFilename();
      	String uuid = UUID.randomUUID().toString().replaceAll("-", "").toUpperCase();
      	// 把文件的名称唯一化
      	filename = uuid+"_"+filename;
      	// 向图片服务器上传文件
      	// 创建客户端对象
      	Client client = Client.create();
      	// 连接图片服务器
      	WebResource webResource = client.resource(path+filename);
      	// 上传文件
      	webResource.put(upload.getBytes());
      	return "success";
      }
      
  • 相关阅读:
    js对象数组(JSON) 根据某个共同字段 分组
    一个 函数 用来转化esSearch 的range 条件
    关于 vuex 报错 Do not mutate vuex store state outside mutation handlers.
    android listview 重用view导致的选择混乱问题
    android SDK和ADT的更新
    Android中adb push和adb install的使用区别
    pycharm中添加扩展工具pylint
    su Authentication failure解决
    Putty以及adb网络调试
    有关android源码编译的几个问题
  • 原文地址:https://www.cnblogs.com/codeDD/p/12699129.html
Copyright © 2020-2023  润新知