可以使用commons-fileupload组件实现文件上传,步骤如下:
1、添加jar包:commons-fileupload-x.x.x.jar和commons-io-2.4.jar
2、编写或修改form表单
1) 提交方式必须是post
2) 为表单增加属性enctype="multipart/form-data"
3) 为文件上传单独提供servlet,因为增加enctype属性后,无法使用常规的请求对象来获取提交的数据
3、使用Commons-FileUpload组件实现文件的上传
1) 确定本次请求是否是文件上传请求
boolean flag=ServletFileUpload.isMultipartContent(request);
2) 创建文件上传的工厂对象
FileItemFactory factory=new DiskFileItemFactory();
3) 创建ServletFileUpload对象,并将工厂对象作为参数传入
ServletFileUpload upload=new ServletFileUpload(factory);
4) 使用上传对象从请求对象中解析出提交的所有表单元素
List<FileItem> lstForms=upload.parseRequest(request);
5) 遍历表单元素集合,实现取出表单元素和上传文件
//遍历所有表单元素
for (FileItem fileItem : lstForms) {
//判断每一个表单元素是否是普通表单
if(fileItem.isFormField()){
System.out.println(fileItem.getString("UTF-8"));
}else{
//上传前准备工作
//a、上传后的路径this.getServletContext().getRealPath("/")会出去当前项目在 部署的服务器上的绝对路径
String path=this.getServletContext().getRealPath("/")+"files/";
//b、找出要上传的文件的名字
String fileName=fileItem.getName();
fileName=fileName.substring(fileName.lastIndexOf("\\")+1);
//c、上传
fileItem.write(new File(path+fileName));
out.println("<h2>"+fileName+"上传成功!</h2>");
}
}
附件为文件上传的完整代码,包括验证上传的必须是图片!
通过servlet的request对象的getParameter()方法可以得到jsp页面传过来的参数
将表单enctype设置为"multipart/form-data"后request.getParameter()不能获取参数值
ENCTYPE="multipart/form-data"用于表单里有图片上传。 <form name="userInfo" method="post" action="first_submit.jsp" ENCTYPE="multipart/form-data"> 表单标签中设置enctype="multipart/form-data"来确保匿名上载文件的正确编码。 如下: <tr> <td height="30" align="right">上传企业营业执照图片:</td> <td><INPUT TYPE="FILE" NAME="uploadfile" SIZE="34" onChange="checkimage()"></td> </tr> 就得加ENCTYPE="multipart/form-data"。 表单中enctype="multipart/form-data"的意思,是设置表单的MIME编码。默认情况,这个编码格式是application/x-www-form-urlencoded,不能用于文件上传;只有使用了multipart/form-data,才能完整的传递文件数据,进行下面的操作. enctype="multipart/form-data"是上传二进制数据; form里面的input的值以2进制的方式传过去。 form里面的input的值以2进制的方式传过去,所以request就得不到值了。 也就是说加了这段代码,用request就会传递不成功,取表单值加入数据库时,用到下面的: SmartUpload su = new SmartUpload();//新建一个SmartUpload对象 su.getRequest().getParameterValues();取数组值 su.getRequest().getParameter( );取单个参数单个值 来源地址:http://hi.baidu.com/dnrranskydhkwze/item/264de2722f6a53285c1789a0
-
提问者评价
-
谢谢!
FormFile file = rs.getFile(); 获取上传的文件 file为 //获取文件的信息 文件名和文件大小 String fileName = file.getFileName(); InputStream is = null; FileOutputStream os = null; //获取文件上传得到服务器的路径 String path = this.getServlet().getServletContext().getRealPath("/file"); //输入流 is = file.getInputStream(); os= new FileOutputStream(path+"\\"+newName); int len = 0; byte [] bytes = new byte[1024]; while((len = is.read(bytes))>0){ os.write(bytes, 0, len); } servlet的request对象的getParameter()方法可以得到jsp页面传过来的参数
将表单enctype设置为"multipart/form-data"后request.getParameter()不能获取参数值,返回结果为null
不能那么获取哦亲 javabean name = (javabean)form 吗? 你可以用 name.getFile()获取 这是 struts中的 Servlet file sd =request.getParameter("file") 获取不到吗??