1.HTML中的设置
在form中,设置method="post",设置enctype="multipart/form-data"。enctype属性用 于设置表单的编码方式,对于文件上传,必须设置成"multipart/form-data"。
2.导入jar包
commons-fileupload-1.3.jar
commons-io-2.4.jar
在servlet类当中,不能够使用request.getParameter方法来获得参数值。
要使用InputStream request.getInputStream();分析InputStream来获得参数值。
直接分析,InputStream比较复杂,
一般使用一些封装好的工具(比如apache提供的commons-fileupload.jar)来获得参数值。
3.servlet的service方法中的代码
//step1 创建一个工厂类的实例,该实例 为解析器提供了缺省的配置。
DiskFileItemFactory factory = new DiskFileItemFactory();
//step2 创建一个解析器
ServletFileUpload sfu = new ServletFileUpload(factory);
//step3 使用解析器解析
try {
//解析之后,会将表单中的数据转换成一个个 FileItem对象。一个表单域中的数据对应于一个FileItem对象。
List<FileItem> items = sfu.parseRequest(request);
//step4 遍历items集合
for(int i=0;i<items.size();i++){
FileItem item = items.get(i);
//读表单域中的数据时,要区分表单域的类型
if(item.isFormField()){
//普通表单域
String username = item.getString();
System.out.println("username是:"+username);
}else{
//文件上传表单域
ServletContext sctx =
getServletContext();
String path = sctx.getRealPath("upload");
System.out.println("path是:"+path);
//获得文件名
String fileName = item.getName();
//window是用\\,Linux用/
fileName= fileName.substring(fileName.lastIndexOf("\\"));
File file = new File(path + "\\" + fileName);
System.out.println(file);
item.write(file);
}
}
} catch (Exception e) {
e.printStackTrace();
}