zoukankan      html  css  js  c++  java
  • 用Commons-FileUpload组件实现文件上传

    需要用到Tomcat还有commons-fileupload-1.3.1.jar包和commons-io-2.4.jar包。

    如果需要传一个文件,form表单必须有enctype="multipart/form-data"属性,否则服务器会认不到。

    表单中enctype="multipart/form-data"的意思,是设置表单的MIME编码。默认情况,这个编码格式是application/x-www-form-urlencoded,不能用于文件上传;只有使用了multipart/form-data,才能完整的传递文件数据,进行下面的操作.  

    如:我的index.jsp页面

     <body>
       <form action="test.jsp" enctype="multipart/form-data"  method="post" >
       <p>文件名:<input type="text" name="filedname"></p>
       <p>选择图片:<input type="file" name="selectfile"></p>
       <input type="submit" value="提交">
       </form>
      </body>

    然后数据提交到test.jsp页面:

    首先要判断请求的数据是否是否是multipart/form-data;

     boolean flag=ServletFileUpload.isMultipartContent(request);

     if (flag) {
      FileItemFactory factory = new DiskFileItemFactory();
      //设置缓冲区大小4kb
      ((DiskFileItemFactory) factory).setSizeThreshold(1024 * 4);
      //设置上传文件用到临时文件存放路径
      String temppath = this.getServletContext().getRealPath(
        "/WEB-INF/temp/");
      File temp = new File(temppath);


      //如果不设置存放路径,那么临时文件将被储存在"java.io.tmpdir"这个JVM环境属性所指定的目录中,tomcat 5.5.9将这个属性设置为了“<tomcat安装目录>/temp/”目录。
      ((DiskFileItemFactory) factory).setRepository(temp);
      ServletFileUpload sfu = new ServletFileUpload(factory);
      //设置单个文件的最大限制
      sfu.setSizeMax(1024 * 1024 * 3);
      //将页面请求传递信息最大值设置为50M
      //upload.setSizeMax(1024*1024*50);

      try {

       //解析数据
       List<FileItem> list = sfu.parseRequest(request);
       Iterator<FileItem> iter = list.iterator();
       while (iter.hasNext()) {
        FileItem item = iter.next();
        if (item.isFormField()) {//如果是普通表单
            String filedname = item.getFieldName();
            if (filedname.equals("filedname")) {
                   out.print(item.getString("utf-8"));
                }
        } else {
         String filename = item.getName();
         if (filename != null && filename != "") {
          List<String> filetype = Arrays.asList("gif",  "bmp", "jpg");
          //从.后面+1下表截取到末尾,再忽略大写
          String ext = filename.substring(
            filename.lastIndexOf(".") + 1)
            .toLowerCase();
          if (!filetype.contains(ext)) {
           out.print("上传失败,文件类型只能是gif、bmp、jpg");
          } else { 

          File file = new File(item.getName());
           String filepath = "/WEB-INF/upload/";
           filepath = this.getServletContext()
             .getRealPath(filepath);
           File savefile = new File(filepath,
             file.getName());
           item.write(savefile);
           out.print(item.getFieldName() + "上传成功!文件大小是:" + item.getSize()+ "bytes!");

    }
         }
        }
       }
      } catch (FileUploadBase.SizeLimitExceededException ex) {
       out.print("上传文件失败,文件太大,单个文件的最大限制是:" + sfu.getSizeMax()+ "bytes!");
      } catch (Exception e) {
       e.printStackTrace();
      }

    }

  • 相关阅读:
    Java_zip_多源文件压缩到指定目录下
    Linux:ps -ef命令
    Linux:find命令中
    String.split()与StringUtils.split()的区别
    StringUtils工具类的常用方法
    Java:substring()
    Java:indexof()
    Linux:grep命令
    12、spring工厂+web前台搭建
    11、redis使用ruby实现集群高可用
  • 原文地址:https://www.cnblogs.com/345214483-qq/p/3889931.html
Copyright © 2011-2022 走看看