使用Apache文件上传组件

使用Apache文件上传组件的主要步骤:

(1)       确定上传的文件的存放路径,调用:

getServletContext().getRealPath("/path");

path可以是不存在地目录,用上述函数获得其真实路径后再调用File类的mkdir()方法创建目录。

(2)       使用DiskFileItemFactory类的实例对象

1.调用:setSizeThresholdint sizeThreshold方法设置是否使用临时文件夹及使用的临界值(即超过sizeThreshold时使用)。

2.调用:setRepositoryString path方法设置临时文件的存放目录。

(3)       使用ServletFileUpload类的实例对象

1.调用:setSizeMaxlong sizeMax方法设置请求消息实体内容的最大允许值。

2.调用:setHeaderEncodingString    encoding方法设置上传的普通字段的名称和文件字段的文件名所使用的字符集编码。

3.调用:paseRequestHttpServletRequest req方法解析得到所有表单字段的对象的集合(List类)。

4    使用FileItem类,逐个取出上一步骤解析出的每个表单字段,转换为

         FileItem类型。

1.调用isFormField()方法判断FileItem对象封装的是一个普通表单字段还是文件表单字段。

         2.处理普通表单字段,可以调用getStringString  encoding返回指定编码的FileItem对象的主体内容。

         3.可以调用getFieldName()返回表单字段元素的name属性值。

         4.处理文件字段,可以调用getName()方法返回文件名。

         5.调用writeFile  file方法将FileItem对象保存的主体内容保存到指定的文件中。

         6.调用delete()方法清空FileItem类对象中存放的主题内容,如果主题内容被保存在临时文件夹中,delete() 方法将删除该临时文件夹。

例子程序:

import java.io.*;

import java.util.*;

import javax.servlet.*;

import javax.servlet.http.*;

import org.apache.commons.fileupload.disk.DiskFileItemFactory;

import org.apache.commons.fileupload.servlet.ServletFileUpload;

import org.apache.commons.fileupload.FileUploadException;

import org.apache.commons.fileupload.*;

 

public class UploadServlet extends HttpServlet

{

    public void doPost(HttpServletRequest request,

                      HttpServletResponse response)

        throws IOException, ServletException

    {

                          response.setContentType("text/html;charset=gb2312");

                          PrintWriter out=response.getWriter();

                         

                          //设置保存上传文件的目录

                          String uploadDir=getServletContext().getRealPath("/upload");

                          System.out.println(uploadDir);

                          if(uploadDir==null)

                          {

                                   out.println("无法访问存储目录");

                                   System.out.println("无法访问存储目录");

                                   return;

                          }

                         

                          File fUploadDir=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;

                          }

                         

                          DiskFileItemFactory dfif=new DiskFileItemFactory();

                          ServletFileUpload sfu=new ServletFileUpload(dfif);

                         

                          //设置使用临时文件缓存及其临界值,此处为超过1M时使用

                          dfif.setSizeThreshold(1024*1024);

                          //设置临时文件的存放位置,忽略此语句时采用默认路径

                          File path=new File("D:\\apache-tomcat\\webapps\\fileupload\\temp");

                          dfif.setRepository(path);

                         

                          //设置请求消息实体内容的最大允许大小,此处设置为2M

                          sfu.setSizeMax(1024*1024*2);             

                          //设置上传的普通字段的内容和文件字段的文件名所采用的字符集编码

                          sfu.setHeaderEncoding("gb2312");

                         

                          //HTTP请求消息中解析所有表单字段对象的集合

                          List fileItems=null;

                         

                          try

                          {

                                   fileItems=sfu.parseRequest(request);

                          }

                          catch(FileUploadException e)

                          {

                                   out.println("解析数据时出现如下问题:");

                                   System.out.println("解析数据时出现如下问题:");

                                   e.printStackTrace(out);

                                   return;

                          }

                         

                          //处理每个表单字段

                          Iterator i=fileItems.iterator();

                          while(i.hasNext())

                          {

                                   FileItem fi=(FileItem)i.next();

                                   //处理普通字段

                                   if(fi.isFormField())

                                   {

                                            String content=fi.getString("gb2312");

                                            String fieldName=fi.getFieldName();

                                            request.setAttribute(fieldName,content);

                                   }

                                   //处理文件字段

                                   else

                                   {

                                            try

                                            {

                                                     String pathSrc=fi.getName();

                                                     //如果用户没有选择上传的文件,忽略处理

                                                     if(pathSrc.trim().equals(""))

                                                     {

                                                             continue;

                                                     }

                                                     //处理用户上传的文件

                                                     int start=pathSrc.lastIndexOf('\\');

                                                     String fileName=pathSrc.substring(start+1);

                                                     File pathDest=new File(uploadDir,fileName);

                                                     fi.write(pathDest);

                                                     String fieldName=fi.getFieldName();

                                                     request.setAttribute(fieldName,fileName);

                                            }

                                            catch(Exception e)

                                            {

                                                     out.println("存储文件时出现如下问题:");

                                                     e.printStackTrace(out);

                                                     return;

                                            }

                                            finally

                                            {

                                                     fi.delete();

                                            }

                                   }

                          }

                          //显示处理结果

                          out.println("用户:"+request.getAttribute("author")+"<br>");

                          out.println("来自:"+request.getAttribute("company")+"<br>");

                          StringBuffer filelist=new StringBuffer();

                          String file1=(String)request.getAttribute("file1");

                          makeUpList(filelist,file1);

                          String file2=(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);

      }

    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值