form表单添加 enctype=“multipart/form-data“ 属性之后,表单提交的数据,request.getParameter获取不到

本人小白一个,不能保证博客中内容都准确,如果博客中有错误的地方,望各位多多指教,请指正。

上面的内容仅仅能解决本人遇到的错误,不一定适用于所有人,如有不适用,请多多包涵。

 

问题:

           form表单添加 enctype="multipart/form-data" 属性之后,表单提交的数据,request.getParameter获取不到

           具体看下图

 

 

 

产生的原因:

           form标签设置了enctype="multipart/form-data"属性后,将会以二进制进行数据传输,所以request就获取不到了

解决:

          看下图,通过contentType中是否包含multipart/form-data 来判断,提交过来的表单是否设置了enctype="multipart/form-data",如果设置了,就得使用文件上传核心对象ServletFileUpload 来解析request请求,获得到form表单中提交过来的所有的数据,下图中的一个FileItem(This class represents a file or form itemThis class represents a file or form item that was received within a  POST request),file 类型与非file 类型需要分开处理。

          部分代码:

//enctype="multipart/form-data"
String contentType = req.getContentType();
System.out.println("req.getContentType()  =  " + contentType);
boolean b = contentType.startsWith("multipart/form-data");
System.out.println("form表单是否设置enctype=\"multipart/form-data\"   " + b);
//确认该操作是否支持文件上传操作,enctype="multipart/form-data"
if(b){
    //创建磁盘工厂对象
    DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
    //创建servlet文件上传核心对象
    ServletFileUpload servletFileUpload = new ServletFileUpload(diskFileItemFactory);
    try {
        //使用servlet文件上传核心对象 ServletFileUpload 解析request请求,获取请求中表单提交过来的数据(所有input)
        List<FileItem> fileItemList = servletFileUpload.parseRequest(req);
        //遍历fileItemList
        for (FileItem fileItem : fileItemList) {
            //判断input的type 是 file类型 还是 非file类型
            if(fileItem.isFormField()){  // true 为 非file类型  false 为 file类型
                String name = fileItem.getFieldName();
                String value = fileItem.getString("UTF-8");
                System.out.println("name/value   = " + name+" / "+value);
            }else {
                System.out.println(fileItem.getName() + "   " +fileItem.getContentType());
            }

        }

    } catch (FileUploadException e) {
        e.printStackTrace();
    }

 

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值