servlet简单的文件上传功能 (一)

2014-11-24 11:03:54 · 作者: · 浏览: 0

step1, 给表单设置enctype属性,其值为 "multipart/form-data",另外,提交方式必须是post。

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对象
* */
Listitems=sfu.parseRequest(request);
//遍历items集合
for(int i=0;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();
}
}
}

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对象
* */
Listitems=sfu.parseRequest(request);
//遍历items集合
for(int i=0;i FileItem item=items.get(i);
//读表单中的数据时要区分表单域的类型
if(item.isFormField()){
//普通表单域