JSP学习笔记:用multipart/form-data提交表单get非文件字段获取的解决办法

最近在解决Servlet文件上传方面遇到了一个问题,就是通过multipart/form-data这个表单类型提交要上传的文件的时候,所跳到的Servlet或者JSP页面无法用request.getParameter()方法获取非文件的字段值。

问题详细描述:

文件上传的JSP页面的form如下:

<form name="fileupload" action="mnt/fileupload" method="post" enctype="multipart/form-data" οnsubmit="return checkupload()">
	<p><input type="file" name="filename"/></p>
	<p>标题:<input type="text" name="ftitle" /></p>
	<input type="submit"  value="上传"/>
</form>


提交到mnt/fileupload指向的负责文件上传的servlet

发现居然用String filetitle=request.getParameter("ftitle").toString() 居然不能获取那个表单里面input type为text,名为ftitle的值。
甚是苦恼。



解决方法:

原因:form是用multipart/form-data提交的 就是多种类型的文件

所以呢request.getParameter是获取不了这种表单里面的任何值的

可以通过如下的方法解决


1.将传递过来的form表单数据 用一个 FileItem的List容器来储存

ServletFileUpload sfu = new ServletFileUpload(factory);  //文件上传组件

List<FileItem> items = sfu.parseRequest(req);//获取表单传过来的所有类型的东西,包括文件和其他数据值

2.遍历这个List容器,然后分辨那些是文件类型,那些是数据值类型

在FileItem 类中 有一个方法叫做isFormField();

isFormField为true,表示这不是文件上传表单域,即他是数据字段 可以用toString来获取转化的值

如果为false,表示为文件类型,后面写文件上传功能实现代码。


3.如果他是数据类型,要怎么取值呢

for (int i = 0; i < items.size(); i++) {
	FileItem item = items.get(i);
	// isFormField为true,表示这不是文件上传表单域
	if (item.isFormField()) {
		String fieldname = item.getFieldName();
		if (fieldname.equals("ftitle")) {
			filetitle = item.getString("UTF-8");
			System.out.println(filetitle);
		}
}

通过getFileName()获取表单的 input 的name类型

如果name类型与要取的类型匹配,则对这个元素 进行getString(字符编码) 方法取值。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值