当前位置: 代码迷 >> 综合 >> form表单添加 enctype=“multipart/form-data“ 属性之后,表单提交的数据,request.getParameter获取不到
  详细解决方案

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

热度:67   发布时间:2024-03-09 12:39:31.0

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

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

 

问题:

           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就相当于一个input,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);//遍历fileItemListfor (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();}

 

  相关解决方案