关于FORM表单中需上传文件(ENCTYPE="multipart/form-data")且传递参数的问题

分析:

1.需上传文件,故在form表单中添加ENCTYPE="multipart/form-data"

2.需传递参数:学期

存在的问题:由于使用了ENCTYPE="multipart/form-data",故在下一个页面里面用request.getParameter("XX")是获取不到“学期”值的

问题处理过程:

1.一开始并不知道问题在于哪里,通过断点调试没找出原因,通过HttpAnalyzerStdV3跟踪分析,发现“学期”的值在第一个页面里是存在的,但是没post到下一个页面,下一个页面接收的值为null,反复分析排查后,才觉悟到问题出在ENCTYPE="multipart/form-data"上面

2.发现问题后,交给搜索引擎,发现网上早有人提过这样的问题了(但发现copy现象即为严重,很多人很不负责,自己没验证过就转帖了,望大哥大姐们验证一下,水贴不要乱贴 乱转),当然给出很多答案(正确与否就不想多说了)

3.小X SG一句话给了我灵感,这才意识到使用的是SmartUpload组件,故找到了对策

解决方法:由于是使用SmartUpload组件解决上传问题的,故使用SmartUpload组件的.getRequest().getParameter("XX")属性就可以获得“学期”的值了(当然一开始并没想到此方法,添加参数这一做法是后来加上去的),代码为:String XX=(String)mySmartUpload.getRequest().getParameter("XX");

PS:

若XX中含有中文时,则会出现乱码现象

处理方法如下:将提交页面的编码方式改为GBK,post后接收的页面的编码方式也改为GBK就OK了

<%@ page contentType="text/html; charset=GBK" language="java" errorPage=""%>

如果还要传递到下一个页面,可以这样解决乱码问题:编码方式可以采用gb2312,然后转一下码,代码如下:

String XX=request.getParameter("XX");

  XX=new String(XX.getBytes("ISO8859_1"),"GB2312");

这样就OK了 
解决enctype= multipart/form-data无法传递其他参数的方法有多种。 一种常见的解决方法是使用一个隐藏的表单字段将额外的参数传递到服务器端。在form标签中添加一个隐藏的input标签,将传递参数作为该字段的值。在提交表单时,该参数会随着文件一起被发送到服务器端。 另一种方法是使用JavaScript来动态地修改表单的action属性,并将额外的参数作为查询字符串添加到action中。当用户点击提交按钮时,JavaScript会通过监听表单的提交事件,在提交之前修改action属性并将额外参数添加到其中。这样,提交表单时就会将所有参数一起发送到服务器端。 如果使用的是Ajax来提交表单,可以将其他参数组成一个对象,然后使用FormData对象来存储文件和其他参数FormData对象可以通过append()方法将文件和其他参数添加到其中,然后通过XmlHttpRequest对象将FormData对象发送到服务器端。 还有一种解决方法是使用服务器端的处理程序来解析multipart/form-data类型的请求,然后从请求体中解析出文件和其他参数。可以根据服务器端的开发语言和框架来选择合适的处理程序,例如在PHP中可以使用$_FILES数组来获取文件,使用$_POST数组来获取其他参数。 综上所述,通过隐藏字段、JavaScript、FormData对象或服务器端的处理程序,都可以实现在enctype= multipart/form-data类型的表单传递其他参数。选择哪种方法取决于具体的求和技术环境。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值