servlet实现form表单的文件上传

注:该方法需要用到commons-fileupload-1.2.2.jar和commons-io-2.4.jar两个包,自行下载。

首先,需要在form表单中设置enctype="multipart/form-data"属性,就能实现文件上传,但是由于enctype="multipart/form-data"是以二进制​的数据格式传输,所以在servlet中无法通过request.getParameter("name")获得值。具体方法如下(红色加粗表示对上传文件格式的判断,可自行选择):

   List fileType = newArrayList();

   fileType.add("gif");

   fileType.add("jpg");

   fileType.add("png");

   fileType.add("rar");

​    request.setCharacterEncoding("utf-8");

    StringuploadFileName="";//上传的文件名

    StringfieldName="";//表单字段元素的name属性值

   //请求信息中的内容是否是multipart类型

    booleanisMultipart =ServletFileUpload.isMultipartContent(request);

   //上传文件的存储路径(服务器文件系统上的绝对文件路径)

    StringuploadFilePath =request.getSession().getServletContext().getRealPath("upload/");//此时需要在WebRoot下创建一个“upload"文件夹

   if(isMultipart) {

   FileItemFactory factory = new DiskFileItemFactory();

   ServletFileUpload upload = newServletFileUpload(factory);

    upload.setSizeMax(1024 *1024*20);//20M大小

    try {

        //解析form表单中所有文件

        List items =upload.parseRequest(request);

        Iterator iter =items.iterator();

        while(iter.hasNext()) {//依次处理每个文件

        FileItem item = (FileItem)iter.next();

        String fileName =item.getName();

        if(item.isFormField()){//如果是普通表单输入域

             fieldName =item.getFieldName();//表单字段的name属性值

             if(fieldName.equals("fname")){//fname为form表单里对应的name的值

             lastName =item.getString("UTF-8");//lastName用来接收与name相对应的value的值

              }

         } else {//如果是文件上传域

                 Stringext =fileName.substring(fileName.lastIndexOf(".") + 1);

                  if (fileType.contains(ext)){

                       if (fileName != null&& !fileName.equals("")) {

                       File fullFile = newFile(item.getName());

                       File saveFile = newFile(uploadFilePath,fullFile.getName());

                       item.write(saveFile);//上传

                       uploadFileName =fullFile.getName();

                       }

                   } else {

                           response.sendRedirect("........");

                          } 

                   }

             }

        } catch (Exception e) {

                response.sendRedirect("..........");

       }

}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值