使用Apache文件上传组件
例子程序:
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
importorg.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
importorg.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.*;
?
public class UploadServlet extendsHttpServlet
{
???public void doPost(HttpServletRequest request,
????????????????????? HttpServletResponseresponse)
???????throws IOException, ServletException
??? {
????????????????????????? response.setContentType("text/html;charset=gb2312");
????????????????????????? PrintWriterout=response.getWriter();
?????????????????????????
????????????????????????? //设置保存上传文件的目录
????????????????????????? StringuploadDir=getServletContext().getRealPath("/upload");
????????????????????????? System.out.println(uploadDir);
????????????????????????? if(uploadDir==null)
????????????????????????? {
?????????????????????????????????? out.println("无法访问存储目录");
?????????????????????????????????? System.out.println("无法访问存储目录");
?????????????????????????????????? return;
????????????????????????? }
?????????????????????????
????????????????????????? FilefUploadDir=new File(uploadDir);
????????????????????????? if(!fUploadDir.exists())
????????????????????????? {
?????????????????????????????????? if(!fUploadDir.mkdir())
?????????????????????????????????? {
??????????????????????????????????????????? out.println("无法创建目录");
??????????????????????????????????????????? System.out.println("无法创建目录");
??????????????????????????????????????????? return;
?????????????????????????????????? }
??????????????????????????????????
????????????????????????? }
?????????????????????????
????????????????????????? if(!ServletFileUpload.isMultipartContent(request))
????????????????????????? {
?????????????????????????????????? out.println("只能处理multipart/form-data类型数据");
?????????????????????????????????? System.out.println("只能处理multipart/form-data类型数据");
?????????????????????????????????? return;
????????????????????????? }
?????????????????????????
????????????????????????? DiskFileItemFactorydfif=new DiskFileItemFactory();
????????????????????????? ServletFileUploadsfu=new ServletFileUpload(dfif);
?????????????????????????
????????????????????????? //设置使用临时文件缓存及其临界值,此处为超过1M时使用
????????????????????????? dfif.setSizeThreshold(1024*1024);
????????????????????????? //设置临时文件的存放位置,忽略此语句时采用默认路径
????????????????????????? Filepath=new File("D:\\apache-tomcat\\webapps\\fileupload\\temp");
????????????????????????? dfif.setRepository(path);
?????????????????????????
????????????????????????? //设置请求消息实体内容的最大允许大小,此处设置为2M
????????????????????????? sfu.setSizeMax(1024*1024*2);?????????????
????????????????????????? //设置上传的普通字段的内容和文件字段的文件名所采用的字符集编码
????????????????????????? sfu.setHeaderEncoding("gb2312");
?????????????????????????
????????????????????????? //从HTTP请求消息中解析所有表单字段对象的集合
????????????????????????? ListfileItems=null;
?????????????????????????
????????????????????????? try
????????????????????????? {
?????????????????????????????????? fileItems=sfu.parseRequest(request);
????????????????????????? }
????????????????????????? catch(FileUploadExceptione)
????????????????????????? {
?????????????????????????????????? out.println("解析数据时出现如下问题:");
?????????????????????????????????? System.out.println("解析数据时出现如下问题:");
?????????????????????????????????? e.printStackTrace(out);
?????????????????????????????????? return;
????????????????????????? }
?????????????????????????
????????????????????????? //处理每个表单字段
????????????????????????? Iteratori=fileItems.iterator();
????????????????????????? while(i.hasNext())
????????????????????????? {
?????????????????????????????????? FileItemfi=(FileItem)i.next();
?????????????????????????????????? //处理普通字段
?????????????????????????????????? if(fi.isFormField())
?????????????????????????????????? {
??????????????????????????????????????????? Stringcontent=fi.getString("gb2312");
??????????????????????????????????????????? StringfieldName=fi.getFieldName();
??????????????????????????????????????????? request.setAttribute(fieldName,content);
?????????????????????????????????? }
?????????????????????????????????? //处理文件字段
?????????????????????????????????? else
?????????????????????????????????? {
??????????????????????????????????????????? try
??????????????????????????????????????????? {
???????????????????????????????????????????????????? StringpathSrc=fi.getName();
???????????????????????????????????????????????????? //如果用户没有选择上传的文件,忽略处理
???????????????????????????????????????????????????? if(pathSrc.trim().equals(""))
???????????????????????????????????????????????????? {
???????????????????????????????????????????????????????????? continue;
???????????????????????????????????????????????????? }
???????????????????????????????????????????????????? //处理用户上传的文件
???????????????????????????????????????????????????? intstart=pathSrc.lastIndexOf('\\');
???????????????????????????????????????????????????? StringfileName=pathSrc.substring(start+1);
???????????????????????????????????????????????????? FilepathDest=new File(uploadDir,fileName);
???????????????????????????????????????????????????? fi.write(pathDest);
???????????????????????????????????????????????????? StringfieldName=fi.getFieldName();
???????????????????????????????????????????????????? request.setAttribute(fieldName,fileName);
????????????????????????? ????????????????? }
??????????????????????????????????????????? catch(Exceptione)
??????????????????????????????????????????? {
???????????????????????????????????????????????????? out.println("存储文件时出现如下问题:");
???????????????????????????????????????????????????? e.printStackTrace(out);
???????????????????????????????????????????????????? return;
??????????????????????????????????????????? }
??????????????????????????????????????????? finally
??????????????????????????????????????????? {
???????????????????????????????????????????????????? fi.delete();
??????????????????????????????????????????? }
?????????????????????????????????? }
????????????????????????? }
????????????????????????? //显示处理结果
????????????????????????? out.println("用户:"+request.getAttribute("author")+"<br>");
????????????????????????? out.println("来自:"+request.getAttribute("company")+"<br>");
????????????????????????? StringBufferfilelist=new StringBuffer();
????????????????????????? Stringfile1=(String)request.getAttribute("file1");
????????????????????????? makeUpList(filelist,file1);
????????????????????????? Stringfile2=(String)request.getAttribute("file2");
????????????????????????? makeUpList(filelist,file2);
????????????????????????? out.println("成功上传文件:"+(filelist.length()==0?"无":filelist.toString()));
??? }
???
???private void makeUpList(StringBuffer result,String fragment)
??? {
??? ???????? if(fragment!=null)
??? ???????? {
??? ???????????????? if(result.length()!=0)
??? ???????????????? {
??? ????????????????????????? result.append(",");
??? ???????????????? }
??? ???????????????? result.append(fragment);
?????}
??? }
}