step2, 在服务器端,不能够直接使用request.getParameter方法来获得数据。只能使用InputStream request.getInputStream();通过分析这个字节流来获得数据。一般通过一些工具来分析。首先将工具对应的一些jar文件拷贝到WEB-INF\lib下。
step3,该servlet如下,相关配置不再赘述,
[java] import java.io.File;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletContext;
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 FileUploadServlet extends HttpServlet {
public void service(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException{
//创建一个工厂类的实例,该实例为解析器提供了缺省的配置
DiskFileItemFactory factory=new DiskFileItemFactory();
//创建一个解析器
ServletFileUpload sfu=new ServletFileUpload(factory);
//使用解析器解析
try{
/**解析之后会将表单中的数据转换为一个个FileItem对象,一个表单域中的数据对应于
* FileItem对象
* */
List<FileItem>items=sfu.parseRequest(request);
//遍历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);
}else{
//文件上传表单域
ServletContext sctx=getServletContext();
String path=sctx.getRealPath("upload");
//获得文件名
String fileName=item.getName();
File file=new File(path+"\\"+fileName);
item.write(file);
}
}
}catch(Exception e){
e.printStackTrace();
}
}
}
step5,表单如下:
[html] <body style="font-size:30px;">
<form action="fileupload" method="post" enctype="multipart/form-data">
username:<input name="username"/>
<br/>
photo:<input type="file" name="file1"/>
<br/>
<input type="submit" value="Confirm"/>
</form>
</body>
<body style="font-size:30px;">
<form action="fileupload" method="post" enctype="multipart/form-data">
username:<input name="username"/>
<br/>
photo:<input type="file" name="file1"/>
<br/>
<input type="submit" value="Confirm"/>
</form>
</body>step6,在tomcat创建一个该图片存放的路径,运行该程序即可