form表单中enctype="multipart/form-data"的传值问题

Ansel-枫儿-Moe 2014-12-24 10:59:48
在from里设置了enctype="multipart/form-data"后用request不能取得表单元素的值
因为我要实现上传,所以表单要设enctype="multipart/form-data",但这样做的话,就不能用request.getParmeter("XXX")来取值了,有什么解决的方法呢?

就是不能取到,用了enctype="multipart/form-data"后,用request.getParameter("XXX")取出来的值是null,如果去掉enctype="multipart/form-data",取出来就正常了

页面是用html5写的。求大神帮忙啊!!!
...全文
72106 35 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
诺贝尔爱情奖 2018-11-19
  • 打赏
  • 举报
回复
我也遇到你这样的问题。我看了这篇博客后才解决的。https://blog.csdn.net/qq_22956867/article/details/51437905 我的解决方法是: 1、在你写的过滤器中,先获取multipartResolver

/ 用于创建MultipartHttpServletRequest
	private MultipartResolver multipartResolver = null;

	public void init(FilterConfig filterConfig) throws ServletException {

		//获取multipartResolver 类
		WebApplicationContext webApplicationContext = ContextLoader
				.getCurrentWebApplicationContext();
		ServletContext context = webApplicationContext.getServletContext();
		WebApplicationContext ctx = WebApplicationContextUtils
				.getWebApplicationContext(context);
		multipartResolver = (MultipartResolver) ctx.getBean("multipartResolver");

	}
2、再doFilter方法判断form表单中的entype是否有multipart,如果有,则把request替换成MultipartHttpServletRequest传递下去

public void doFilter(ServletRequest req, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		HttpServletRequest request = (HttpServletRequest)req;

	    HttpSession session = request.getSession();
	    CurrentUserBean sysUser = (CurrentUserBean)session.getAttribute("http_session_atribute_current_user_info");
	    //判断在新增修改时,如果form表中的entype中有multipart/form-data,则把request换成MultipartHttpServletRequest,这样
		//才可以获取到form表中的值,并且进行过滤 
		String enctype = req.getContentType();
		if (StringUtils.isNotBlank(enctype) && enctype.contains("multipart/form-data")){
			// 返回 MultipartHttpServletRequest 用于获取 multipart/form-data 方式提交的请求中 上传的参数
			chain.doFilter(new LocalXssHttpServletRequestWrapper(multipartResolver.resolveMultipart(request),filterChar,replaceChar,splitChar), response);
		}else {
			chain.doFilter(new LocalXssHttpServletRequestWrapper(request,filterChar,replaceChar,splitChar), response);
		}
	}
3、这样,你再接下来的request中就能获取到值了。
Rover_Geek 2017-07-17
  • 打赏
  • 举报
回复
14年底就在问问题了,17年应该也是入门了吧?
秀珍醉清风 2017-03-08
  • 打赏
  • 举报
回复
<input type="hidden" name="id" value="${items.id }"/> 把隐藏放在form里带过去
jennysas 2017-01-22
  • 打赏
  • 举报
回复
如果我是node做数据处理 先接html页面的form表单提交(里面有name age 还有图片) 通过api接口向java的后台传递 不仅要name age 还要把图片也传过去(这个图片不在node层保留 直接穿给后台) 并且!!!!我需要接到后台传回来的信息 怎么做呢?
KoshiroGuo 2016-12-31
  • 打赏
  • 举报
回复
Form表单的enctype="multipart/form-data"后,request.getParamter()方法就失效了,肯定值为空了。使用fileupload的一个工具包,网上有,重新解析request会得到一个FileItem的list集合,里面就是你传的参数信息和文件
ff445566 2016-11-28
  • 打赏
  • 举报
回复
引用 28 楼 Bennett2251 的回复:
[quote=引用 23 楼 anselmoe 的回复:] [quote=引用 18 楼 liudashao0 的回复:] form中是不是有普通组件和上传组件?还有就是你是不是想取普通组件的值?如果你是想取普通组件的值,request..getParmeter()取出来的值肯定是空值。 FileItem item= (FileItem) iterator.next(); String all = new String(item.getString().getBytes("iso-8859-1"), "utf-8"); String allvalue = item.getFieldName(); 明白??
恩,懂了~~[/quote] 这个应该怎样使用啊,我也是遇到了这个问题,不知怎样取出form表单中非文件域的值[/quote] 。。。。。怎么解决我也遇到这个问题了
Hello muzi90 2016-11-13
  • 打赏
  • 举报
回复
这个如果用框架,框架会自动转换的吧,比如struts2和springmvc这些C层的框架都有做处理的吧。
Bennett2251 2016-09-16
  • 打赏
  • 举报
回复
引用 23 楼 anselmoe 的回复:
[quote=引用 18 楼 liudashao0 的回复:] form中是不是有普通组件和上传组件?还有就是你是不是想取普通组件的值?如果你是想取普通组件的值,request..getParmeter()取出来的值肯定是空值。 FileItem item= (FileItem) iterator.next(); String all = new String(item.getString().getBytes("iso-8859-1"), "utf-8"); String allvalue = item.getFieldName(); 明白??
恩,懂了~~[/quote] 这个应该怎样使用啊,我也是遇到了这个问题,不知怎样取出form表单中非文件域的值
qq_34228113 2016-07-28
  • 打赏
  • 举报
回复
先取文件上传的东西,然后再取普通的控件值。 eg: <form action="" method="post" nctype="multipart/form-data"> <input type="file" name="file" /> <input type="text" name="cityname" /> <input type="submit" value="submit"> 后台: UploadFile file = getFile("file"); String cityname=getPara("cityname");
xiaokangs 2016-07-11
  • 打赏
  • 举报
回复
enctype =multipart/form-data 这个我理解的是流的方式传递数据 (主要是文件上传使用), 这种情况下 post<input name='XXX' vale=""> 的数据是不能直接 通过一般的方式拿的,需要流读取才行,我的解决方案: npm: npm install formidable 代码: 引用 var formidable = require('formidable'), fs = require('fs'); requset(req,res){ var form = new formidable.IncomingForm(); //创建上传表单 form.encoding = 'utf-8'; //设置编辑 form.uploadDir = '../temp/picture/'; //设置上传目录 文件会自动保存在这里 form.keepExtensions = true; //保留后缀 form.maxFieldsSize = 5 * 1024 * 1024 ; //文件大小5M form.parse(req, function (err, fields, files) { //这里可以直接: console.dir( fields)//这里就是post的XXX 的数据 console.dir( files)//这里就是上传的文件 if (err) { /* 错误处理 */ next(err); return; } var uploadfile; for (var imginfo in files) { console.dir( imginfo )//这里就是上传每个文件 uploadfile= imginfo; } // imginfo 得到一个文件 if (uploadfile._writeStream.bytesWritten > form.maxFieldsSize) { logger.error('图片不能大于5M'); respObject.msg = '图片不能大于5M'; next(respObject); return; } var extName = ''; //后缀名 switch (uploadfile.type) { case 'image/pjpeg': extName = 'jpg'; break; case 'image/jpeg': extName = 'jpg'; break; case 'image/png': extName = 'png'; break; case 'image/x-png': extName = 'png'; break; case 'image/gif': extName = 'gif'; break; } if (extName.length == 0) { logger.error('只支持png,jpg,gif格式图片'); respObject.msg = '只支持png,jpg,gif格式图片'; next(respObject); return; } uploadfilename = uploadfile.path upload_filename = uploadfile.name; upload_filetype = uploadfile.type; }); return; }); } 分给我吧!!!
qq_35019931 2016-05-18
  • 打赏
  • 举报
回复
如果使用springmvc框架要怎么处理才能拿到普通组件(text)的值
ouzhijian 2016-05-18
  • 打赏
  • 举报
回复
引用 24 楼 qq_35019931 的回复:
如果使用springmvc框架要怎么处理才能拿到普通组件(text)的值
// 这种方式只能<form .... enctype="multipart/form-data"> 才可以使用 MultipartResolver resolver = new CommonsMultipartResolver(request.getSession().getServletContext()); MultipartHttpServletRequest multipartRequest = resolver.resolveMultipart(request);
wyx100 2015-01-06
  • 打赏
  • 举报
回复
action后面拼接传参数。
dao_ao 2015-01-06
  • 打赏
  • 举报
回复
enctype="multipart/form-data",这个加到表单中表示,有file控件,比如说带图片上传的表单,他本身就是把表单多数据格式上传。如果表单中没有file控件的话,就不需要加enctype="multipart/form-data",如楼主所示,如果表单中没有file控件,但是却加上这句话的话,后台用request是取不到控件的值的。
Ansel-枫儿-Moe 2015-01-06
  • 打赏
  • 举报
回复
引用 18 楼 liudashao0 的回复:
form中是不是有普通组件和上传组件?还有就是你是不是想取普通组件的值?如果你是想取普通组件的值,request..getParmeter()取出来的值肯定是空值。 FileItem item= (FileItem) iterator.next(); String all = new String(item.getString().getBytes("iso-8859-1"), "utf-8"); String allvalue = item.getFieldName(); 明白??
恩,懂了~~
永远的幸福a 2015-01-06
  • 打赏
  • 举报
回复
http://blog.csdn.net/u011431550/article/details/42320495你可以下载看看这个,写一个装饰器
zzkzsmj 2015-01-05
  • 打赏
  • 举报
回复
你用getParameter肯定获取不到的,你可以用getInputStream接收,在读取就成了,现在不过有封装好的第三方j上传组建处理上传的,不用自己去写,方便些,一般使用fileupload,cos,Jsp-smart-upload,最后者用的不多,上传200m以上就会崩溃。
liudashao0 2015-01-04
  • 打赏
  • 举报
回复
form中是不是有普通组件和上传组件?还有就是你是不是想取普通组件的值?如果你是想取普通组件的值,request..getParmeter()取出来的值肯定是空值。 FileItem item= (FileItem) iterator.next(); String all = new String(item.getString().getBytes("iso-8859-1"), "utf-8"); String allvalue = item.getFieldName(); 明白??
Ansel-枫儿-Moe 2015-01-04
  • 打赏
  • 举报
回复
引用 16 楼 liudashao0 的回复:
肯定取不到值吗,里面有getFieldName(),能取到enctype="multipart/form-data"中的值
这个还没试过,怎么写?
liudashao0 2015-01-04
  • 打赏
  • 举报
回复
肯定取不到值吗,里面有getFieldName(),能取到enctype="multipart/form-data"中的值
加载更多回复(14)

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧