1. org.apache.struts.upload.*;

          这个比较操作上比较简单,用FormFile 得到一个上传文件的FormFile对象,对象中保存了上传文件的名字信息,上传表单子段信息和本地上传地址以及上传文件的流信息。然后再写到服务器文件中就ok了

 

												
												// …
// ① 检查输入请求是否为multipart的表单数据。  
FormFile image = myform.getImagefile();   //         imagefile为FormFile对象;   

    String basepath = Utils.getBasePath(request);   
if (null != image && image.getFileSize() > 0) {
     imagename = member_id + "." + Utils.getFormFileType(image);    //得到保存文件的类型
       } 
Utils.saveFile(basepath, "memimage", imagename, image); 





												
												// …

 public static String getFormFileType(FormFile file) {
                 String type = "";
                 int tmp = file.getFileName().indexOf(".");
                 if (tmp > 0) {
                     type = file.getFileName().substring(tmp + 1);
                }
                 return type;
       }

     public static void saveFile (StringbasePath,String subPath,String fileName,FormFile file)
throws Exception {
                if (null == file || file.getFileSize() < 1) {
                   return;
                 }
                String filePath = basePath + "upload\\" + subPath+"\\";
                 File fileTmp = new File(filePath);
                 if (fileTmp.exists()) {
                   if (!fileTmp.isDirectory()) {
                            throw new AppException("文件保存路径错误!");
                          }
                      } else {
                            fileTmp.mkdirs();
                  }

               fileTmp = new File(filePath + fileName);
               FileOutputStream fo = new FileOutputStream(fileTmp);
               fo.write(file.getFileData());
               fo.close();
    } 


 2.Jakarta Commons.FileUpload

首先创建一个HTML页面。注意,凡是要上载文件的表单都必须设置enctype属性,且属性的值必须是multipart/form-data,同时请求方法必须是POST。下面的表单除了上载两个文件,另外还有一个普通的文本输入框:

<form name="myform" action="fileuploaddemo.jsp"
 method="post" enctype="multipart/form-data">
    输入你的名字:<br />
      <input type="text" name="name" size="15"/><br />
  图形:<br />
      <input type="file" name="imagefile"><br/>
  文件:<br />
      <input type="file" name="myfile"><br /><br />
    <input type="submit" name="Submit" 
     value="Submit your files"/>


												
												// …
// ① 检查输入请求是否为multipart的表单数据。
boolean isMultipart = FileUpload.
  isMultipartContent(request);
// …
// ② 为该请求创建一个句柄,通过它来解析请求。执行
//    解析后,所有的表单项目都保存在一个List中。
DiskFileUpload upload = new DiskFileUpload();
// 通过句柄解析请求,解析得到的项目保存在一个List中
List items = upload.parseRequest(request);
// …
// ③ 通过循环依次获得List里面的文件项目。要区分表示
//    文件的项目和普通的表单输入项目,使用isFormField()
//    方法。根据处理请求的要求,我们可以保存上载的文
//    件,或者一个字节一个字节地处理文件内容,或者打
//    开文件的输入流。
Iterator itr = items.iterator();

while(itr.hasNext()) {
 FileItem item = (FileItem) itr.next();
        
// 检查当前的项目是普通的表单元素,还是一个上载的文件
 if(item.isFormField()) {
// 获得表单域的名字
 String fieldName = item.getFieldName();
// 如果表单域的名字是name…
 if(fieldName.equals("name"))
  request.setAttribute("msg", 
  "Thank You: " + item.getString());
  
 } else {
// 该项目是一个上载的文件,把它保存到磁盘。
// 注意item.getName()
// 会返回上载文件在客户端的完整路径名称,这似乎是一个BUG。
// 为解决这个问题,这里使用了fullFile.getName()。
  File fullFile  = new File(item.getName());  
  File savedFile = new File
  (getServletContext().getRealPath("/"),
  fullFile.getName());
  item.write(savedFile);
 }
}


  我们可以通过上载句柄的upload.setSizeMax来限制上载文件的大小。当上载文件的大小超过允许的值时,程序将遇到异常。在上面的例子中,文件大小的限制值是-1,表示允许上载任意大小的文件。

  还有其他一些略有变化的使用形式,正如前面所指出的,我们可以在上载的文件上打开一个输入流,或者让它们驻留在内存中直至空间占用达到一定的限制值,或者在判断文件类型的基础上,以String或Byte数组的形式获取其内容,或者直接删除文件。这一切都只要使用FileItem类提供的方法就可以方便地做到(DefaultFileItem是FileItem的一个实现)。