可以使用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") 获取不到吗??
JSP文件上传与参数获取
本文介绍在JSP中如何使用commons-fileupload组件处理文件上传,并获取表单中的其他参数。通过设置表单的enctype属性为multipart/form-data,确保文件和其他数据能正确上传。
程秀娟

被折叠的 条评论
为什么被折叠?



