servlet如何获取含有ENCTYPE="MULTIPART/FORM-DATA"的表单数据

虫洞 2009-04-27 01:05:40
现在像做一个文件上传+文件分割程序
想在servlet获取含有ENCTYPE="MULTIPART/FORM-DATA"的表单数据

网张找到应该用mySmartUpload.getRequest().getParameter("name");
现在form中有一个type和text表单
如何获取text表单数据

似乎在含有ENCTYPE="MULTIPART/FORM-DATA"的form中
不但type表单不能用request.getParameter()来获取
其他表单也被屏蔽了

我觉得这是个很经典的问题,为什么许多课本的讲解都不详细
即便是像《servlet与jsp核心技术 第二版》这样的书籍也是一带而过
就说servlet api没有为读取上传提供高级工具
见网上那么多提问,也没有很彻底的解决
只好自己再提问
...全文
5191 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
悟空在此 2011-10-27
  • 打赏
  • 举报
回复
不用控件,自己搞定了,哈哈
虫洞 2009-05-09
  • 打赏
  • 举报
回复
已解决
第三方组件确实能解决,关键是代码的位置
要放到mySmartUpload.save(path);后
不明白那么多书上就是不说清楚,就当我们都知道的吗?

mySmartUpload.initialize(config,request,response);
try {
// 上载
mySmartUpload.upload();
filename=mySmartUpload.getFiles().getFile(0).getFileName();
// 保存上载文件到指定目录
// PATH为form表单提交过来的
count = mySmartUpload.save(path);
filename=mySmartUpload.getRequest().getParameter("sourcefile");
//一定要放到mySmartUpload.save(path);后
num= mySmartUpload.getRequest().getParameter("num");
// 显示处理结果
out.println(count + "文件已上传至:"+path+"<br>");

} catch (Exception e){
out.println("Unable to upload the file.<br>");
out.println("Error : " + e.toString());
}
out.println(num+"<br>"+filename+"<br>");

虫洞 2009-04-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 xtbzqw 的回复:]
你的问题我以前也遇到过啊,你通过jspsmartupload或者fileupload这样的第三方组建,在它提供的方法中有专门可以取到text这样的字段的值,具体是什么方法我也不记得了,你可以自己找一找
[/Quote]
我知道jspsmartupload组件有获取ENCTYPE="MULTIPART/FORM-DATA"的form中text表单的方法
我程序已经用
filename=mySmartUpload.getRequest().getParameter("sourcefile");
num= mySmartUpload.getRequest().getParameter("num");
问题就是现在用了也是返回null
虫洞 2009-04-27
  • 打赏
  • 举报
回复
总觉得这么多人的回答就是那么的不负责啊
我发帖前起码懂得先到google、百度搜索吧
如果真像你们说的这么简单就能解决
还需要到这里提问吗

我在论坛的帖子搜索“ENCTYPE="MULTIPART/FORM-DATA"”
见到里边的恢复也都是类似
基本没有解决各位楼主的提问

现在我把自己代码贴出来了
如果真的那么容易,高手就在原来代码上修改一下回复
robyjeffding 2009-04-27
  • 打赏
  • 举报
回复
用fileupload组件吧!
zuguanqun 2009-04-27
  • 打赏
  • 举报
回复
up 2 楼
xtbzqw 2009-04-27
  • 打赏
  • 举报
回复
你的问题我以前也遇到过啊,你通过jspsmartupload或者fileupload这样的第三方组建,在它提供的方法中有专门可以取到text这样的字段的值,具体是什么方法我也不记得了,你可以自己找一找
虫洞 2009-04-27
  • 打赏
  • 举报
回复
我现在才学mvc
是使用jsp+servlet+javabean
希望能通过第三方组件jspsmartupload实现获取含有ENCTYPE="MULTIPART/FORM-DATA"的form中数据

struts还不熟悉,将来再学习request.getInputStream
liuyar 2009-04-27
  • 打赏
  • 举报
回复
request.getInputStream

自己分析一下,写成自己常用的类,
提供取String,String[],int,int[],File,File[]等的方法,
写完了,
你就可以写J2EE框架中的十分之一功能了.
forchase 2009-04-27
  • 打赏
  • 举报
回复
关注中...
tianxiayouren 2009-04-27
  • 打赏
  • 举报
回复
太好了。。呵呵
numbcola 2009-04-27
  • 打赏
  • 举报
回复
还真没遇到过这个问题,貌似接触过的表现层全都是用了第三方框架,struts,spring。
虫洞 2009-04-27
  • 打赏
  • 举报
回复
真的就不能在我的代码上修改一下吗
我知道网上有许多方法,但自己找到的测试了都行不通
要么就是更复杂的知识,没接触
现在就希望用jspsmartupload组件获取参数

我的代码很简单
获取表单数据,最多就在dopost里加一句
但我不知道具体的方法和位置

请高手恢复时修改一下代码行吗

树成 2009-04-27
  • 打赏
  • 举报
回复
当表单出现MULTIPART/FORM-DATA的时候,提交就不再是以参数形式提交了,浏览器会把所有参数封装在一个流里面提交。
你要获得提交的值可以通过request.getInputStream来获得,你可以暂时把这个流保存在一个地方,分析这个流的组成,然后截取需要的部分。
当然很多第三方框架已经实现截取功能,网上很多的。
虫洞 2009-04-27
  • 打赏
  • 举报
回复
我的文件很简单,发现从表单获取的参数都为null
<HTML><BODY>
<FORM ENCTYPE="MULTIPART/FORM-DATA" METHOD="POST" ACTION="doservlet">
文件名称:
 <INPUT TYPE="file" NAME="sourcefile"><BR>
分割文件个数:
<input type="text" name="num"><br>
 <INPUT TYPE="submit" value="上传">
 <INPUT TYPE="reset" value="清除">
<BR>
</FORM>
</BODY></HTML>



import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import com.jspsmart.upload.*;
import FenBean.Fen;
public class doservlet extends HttpServlet {
private ServletConfig config;
//初始化Servlet
final public void init(ServletConfig config) throws ServletException {
this.config = config;
}
//处理GET请求
public void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
PrintWriter out = response.getWriter();
out.println("The method of the HTML form must be POST.");
}
//响应POST请求
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=GBK");
PrintWriter out = response.getWriter();
request.setCharacterEncoding("GBK");

// 变量定义
int count=0;
String path=request.getRealPath("/");
String num="1";
String filename=null;
SmartUpload mySmartUpload = new SmartUpload();



// 初始化
mySmartUpload.initialize(config,request,response);
filename=mySmartUpload.getRequest().getParameter("sourcefile");
num= mySmartUpload.getRequest().getParameter("num");
out.println(filename+"<br>"+num+"<br>");
try {
// 上载
mySmartUpload.upload();
filename=mySmartUpload.getFiles().getFile(0).getFileName();
// 保存上载文件到指定目录
// PATH为form表单提交过来的
count = mySmartUpload.save(path);
// 显示处理结果
out.println(count + "文件已上传至:"+path+"<br>");

} catch (Exception e){
out.println("Unable to upload the file.<br>");
out.println("Error : " + e.toString());
}
out.println(num+"<br>"+filename+"<br>");
//Fen myfileFen=new Fen();
//myfileFen.cut(path+filename,num);
}
}

81,090

社区成员

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

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