JSP问题,在FORM里设置了enctype="multipart/form-data"后用request不能取得表单元素的值
我想上传文件,必须加enctype="multipart/form-data",但是,我有想传递一个ID过去,该怎么传才能被接收啊?加了enctype="multipar...
我想上传文件,必须加enctype="multipart/form-data",但是,我有想传递一个ID过去,该怎么传才能被接收啊?加了enctype="multipart/form-data"这个后就用request获取的是null值了,去掉这个就能获取到,我到底该怎么办啊?我想拿到那个ID。。
展开
2个回答
推荐于2018-03-28
展开全部
他是用2进制流传输的,你要按流那出来,解析。具体的自己查API文档。方法都给你说了,提高不了。
提示下,request.getInputStream()-------------------------------------------------这是我使用Apache 的fileupload包写的上传代码 DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
try {
List items = upload.parseRequest(request);
Iterator it = items.iterator();
while (it.hasNext()) {
FileItem item = (FileItem) it.next();
if (item.isFormField()) { //如果是表单域
System.out.println("表单的参数名称:" + item.getFieldName()
+ ",对应的参数值:" + item.getString("GBK"));
if(item.getFieldName().equals("id")){
goodsID=item.getString();
goodsID=ChangeEncoding.changeToGBK(goodsID);
}
} else { //如果是文件
if (item.getName() != null && !item.getName().equals("")) {
System.out.println("上传文件的大小:" + item.getSize());
System.out.println("上传文件的类型:" + item.getContentType());
System.out.println("上传文件的名称:" + item.getName()); File file = new File(sc.getRealPath("/")
+ 保存路径, 保存文件名);
item.write(file);
}
}
}
} catch (Exception e) {
e.printStackTrace();
System.err.println("上传文件不成功!");
}
提示下,request.getInputStream()-------------------------------------------------这是我使用Apache 的fileupload包写的上传代码 DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
try {
List items = upload.parseRequest(request);
Iterator it = items.iterator();
while (it.hasNext()) {
FileItem item = (FileItem) it.next();
if (item.isFormField()) { //如果是表单域
System.out.println("表单的参数名称:" + item.getFieldName()
+ ",对应的参数值:" + item.getString("GBK"));
if(item.getFieldName().equals("id")){
goodsID=item.getString();
goodsID=ChangeEncoding.changeToGBK(goodsID);
}
} else { //如果是文件
if (item.getName() != null && !item.getName().equals("")) {
System.out.println("上传文件的大小:" + item.getSize());
System.out.println("上传文件的类型:" + item.getContentType());
System.out.println("上传文件的名称:" + item.getName()); File file = new File(sc.getRealPath("/")
+ 保存路径, 保存文件名);
item.write(file);
}
}
}
} catch (Exception e) {
e.printStackTrace();
System.err.println("上传文件不成功!");
}
2013-07-31
展开全部
文件上传和普通请求都是用2进制传输的,但是参数的拼接方式不一样,普通请求是param1 , param2.....这样一个一个接起来的。但是文件上传是吧文件的2进制数据和参数混杂起来,报文中还掺杂着一些分割线,标识符等特殊信息。因此对于文件上传,你需要自己来做报文的解析,把参数报文还原成应有的样子,这个现在有很多控件都有这个功能,可以使用apache 的common-fileupload来做
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询