1.创建JSP页面
<form action="UploadServlet" method="post" enctype="multipart/form-data">
用 户 名: <input type="text" name="username"/>
上传文件: <input type="file" name="file"/><br/>
<input type="submit" value="提交"/>
2.创建servlet
package com.shxt.servlet;
public class UploadServlet extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//解决文件乱码
request.setCharacterEncoding("utf-8");
//1.创建DiskFileItemFactory 对象
DiskFileItemFactory dfif = new DiskFileItemFactory();
//2.创建ServletFileUpload类的实例。使用DiskFileItemFactory 对象作为参数
ServletFileUpload upload = new ServletFileUpload(dfif);
//3.解析请求对象中所有的表单项,返回一个list列表 每一个表单项或叫表单控件都对应一个FileItem
try {
List<FileItem> items = upload.parseRequest(request);
for(FileItem item : items){
//判断表单项是file类型还是一般类型
if(item.isFormField()){
//一般表单类型
//String getFieldName():获取到表单域的name属性。
String filedName = item.getFieldName();
//String getString([encoding]):以默认或指定的编码方式获取到当前fileitem的内容
String value = item.getString("utf-8");
request.setAttribute(filedName, value);
}else{
//file表单类型
String filedName = item.getFieldName();
//获取所上传的文件名
String value = item.getName();
//由于有多个浏览器版本,所以要做字符串截取处理
String resultFileName=value.substring(value.lastIndexOf("\\")+1);
request.setAttribute(filedName, resultFileName);
//获取应用程序上下文WebRoot
String path=request.getRealPath("/upload");
//将文件格式上传到浏览器
//构建一个输出流,目的是将用户上传的文件以输出流的方式写入到应程序上下文的upload文件夹中
OutputStream os=new FileOutputStream(new File(path,resultFileName));
//构建一个输入流,目的是以流的方式接收用户上传的文件
InputStream is=item.getInputStream();
//将输入流里的内容写入到输出流中,目的是在程序上下文的upload文件夹中创建用户上传的文件
//流的输入输出 要借助于缓冲区,即使用字节数组,400为缓冲区大小-->400byte
byte[] buffer = new byte[400];
//length代表读取的字节数量
int length = 0;
//输入流是使用read()方法按字节读取文件,并读到上面创建的缓冲区中,大于0表示还有内容要读取
while((length = is.read(buffer))>0){
//有内容就要不断的将文件内容使用输出流写到程序上下文的upload文件夹中
os.write(buffer,0,length);
}
}
} }catch (Exception e) {
e.printStackTrace();
}
}
}
3,在web—info 创建upload 文件夹