本人小白一个,不能保证博客中内容都准确,如果博客中有错误的地方,望各位多多指教,请指正。
上面的内容仅仅能解决本人遇到的错误,不一定适用于所有人,如有不适用,请多多包涵。
问题:
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(); }