servlet使用fileupload组件实现文件上传

需要的库:
[url]http://commons.apache.org/fileupload/[/url]
[url]http://commons.apache.org/io/[/url]

下载后解压zip 包,将commons-fileupload-1.3.x.jar和commons-io-2.x.jar 复制到t项目的WEB-INF/lib下。

文件上传的过程:
1).以multipart/form-data编码的POST请求向Servlet提交;
2).Servlet通过ServletFileUpload解析quest,并保存上传文件到temp目录;
3).再以IO方式把temp文件写到upload目录;

一、表单页面upload.jsp:

<!--如果不提供enctype会怎么样?→_→-->
<form action="UploadServlet" method="post" enctype="multipart/form-data">
<input type="text" name="username"><br>
<input type="file" name="file1"><br>
<input type="file" name="file2"><br>
<input type="submit" value="submit">
</form>


二、处理表单的Servlet—UploadServlet

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

public class UploadServlet extends HttpServlet
{
@Override
@SuppressWarnings("deprecation")
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
{
//先在根目录下建两个文件
String uploadPath = req.getRealPath("/upload");
String tempPath = req.getRealPath("/temp");
try
{
//创建一个基于硬盘的FileItem工厂
DiskFileItemFactory factory = new DiskFileItemFactory();
//设置向硬盘写数据时所用的缓冲区的大小,默认为2K
factory.setSizeThreshold(10 * 1024);
//设置临时目录
factory.setRepository(new File(tempPath));

//创建一个文件上传处理器
ServletFileUpload upload = new ServletFileUpload(factory);
//限制上传文件大小
upload.setSizeMax(1024 * 1024);
//解决文件名中文乱码
upload.setHeaderEncoding("utf-8");

//解析reqest
//这一步文件已经上传到临时目录了,文件后缀为tmp
List<FileItem> items = upload.parseRequest(req);

for (FileItem item : items)
{
if (item.isFormField())
{
//处理普通表单域
String fieldname = item.getFieldName();
String value = item.getString();

req.setAttribute(fieldname,value);
}
else
{
//处理上传文件
String filename = item.getName();
int index = filename.lastIndexOf("//");
filename = filename.substring(index + 1, filename.length());

if (filename.equals(""))
return;

File uploadFile = new File(uploadPath + "/" + filename);

//简单但不够灵活
//item.write(uploadFile);

//可以自定义文件上传进度
InputStream is = item.getInputStream();
OutputStream os = new FileOutputStream(uploadFile);
byte[] buff = new byte[1024];
for (int length = 0; -1 != (length = is.read(buff));)
{
os.write(buff, 0, length);
}

req.setAttribute(item.getFieldName(),filename);
}
}

}
catch (Exception e)
{
e.printStackTrace();
}

req.getRequestDispatcher("uploadresult.jsp").forward(req,resp);
}

}


该Servlet在Web.xml中其配置为:

<servlet>
<servlet-name>upload</servlet-name>
<servlet-class>UploadServlet</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>upload</servlet-name>
<url-pattern>/upload</url-pattern>
</servlet-mapping>


结果页面uploadresult.jsp

<body>
username:${requestScope.username }<br>
filename1:${requestScope.file1 }<br>
filename2:${requestScope.file2 }<br>
</body>


参考:
[url]http://blog.csdn.net/xiaoyousifang/article/details/5651642[/url]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值