我在用fileupload 组件进行文件上传时..上传代码写在servlet 中 
   try {
        //FileUpload  fu=new FileUpload ();
        DiskFileUpload  fu=new DiskFileUpload();
        // 设置最大文件尺寸,这里是4MB
         fu.setSizeMax(4194304);
       // 设置缓冲区大小,这里是4kb
        fu.setSizeThreshold(4096);
       // 设置临时目录:
        fu.setRepositoryPath(tempPath);       // 得到所有的文件:
        List fileItems =fu.parseRequest(request);// fu.parseRequest(request);
        Iterator i = fileItems.iterator();
       // 依次处理每一个文件:
       while(i.hasNext()) {
           FileItem fi = (FileItem)i.next();
           // 获得文件名,这个文件名包括路径:
           String fileName = fi.getName();
           long filesize=fi.getSize();
           System.out.println("上传的文件名为!!!"+fileName);
           // 在这里可以记录用户和文件信息
           // ...
           // 写入文件,暂定文件名为a.txt,可以从fileName中提取文件名:
           fi.write(new File(uploadPath +fileName));
       }
   }
   catch(Exception ex) {
       System.out.println("上传文件时出错!!!");
       ex.printStackTrace();
    
   }
出现下面的错误...
<form method="get" action="../saveemailservlet" name="emailform" enctype="multipart/form-data"> 当我表单用GET 方法请求时.出现在下面的异常...
org.apache.commons.fileupload.FileUploadBase$InvalidContentTypeException: the request doesn't contain a multipart/form-data or multipart/mixed stream, content type header is null
at org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:294)
at org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:268)
at com.netoa.web.SaveEmailServlet.UploadFile(SaveEmailServlet.java:143)
at com.netoa.web.SaveEmailServlet.doGet(SaveEmailServlet.java:75)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)后来发现文件上传表单必须用 POST方法..改成下面
<form method="POST" action="../saveemailservlet" name="emailform" enctype="multipart/form-
但是出现一个问题...我在servlet 中的doGet()和doPost()方法中得不到请求的参数
request.getParameter("filestate")  这样得到的值全部是null请问高手这是什么原因...怎么解决..

解决方案 »

  1.   

    哪位大哥帮我看看啊..
    如果改成POST  但是我又要得到请求参数的值的话..要怎么得到啊?
      

  2.   

    使用你的组件(包)对象(fu)获取,多数是getXXname("参数")的,具体是什么我不太清楚,这个组件没有用过!
      

  3.   

    DiskFileUpload 类已过时,需要改用 ServletFileUpload 类可以支持读取请求参数。
    代码如下:// 定义一个HashMap,存放请求参数
    Map parameters = new HashMap();try {
        FileItemFactory factory = new DiskFileItemFactory();
        ServletFileUpload fu = new ServletFileUpload(factory);    // 设置最大文件尺寸,这里是4MB
        fu.setSizeMax(4194304);
        // 设置缓冲区大小,这里是4kb
        factory.setSizeThreshold(4096);
        // 设置临时目录:
        factory.setRepositoryPath(tempPath);    // 得到所有的文件,以及其它请求参数:
        List fileItems = fu.parseRequest(request);// fu.parseRequest(request);
        Iterator i = fileItems.iterator();
        // 依次处理每一个文件,以及请求参数:
        while(i.hasNext()) {
            FileItem fi = (FileItem)i.next();        // 如果是文件项,则保存文件到上传目录
            if (!fi.isFormField()) {
                // 获得文件名,这个文件名包括路径:
                String fileName = fi.getName();
                long filesize = fi.getSize();
                System.out.println("上传的文件名为!!!"+fileName);
                // 在这里可以记录用户和文件信息
                // ...
                // 写入文件,暂定文件名为a.txt,可以从fileName中提取文件名:
                fi.write(new File(uploadPath +fileName));
            }
            else { // if (fi.isFormField()==true): 如果是请求参数,则保存到HashMap中
                String name = fi.getFieldName();
                String value = fi.getString();
                parameters.put(name, value);
            }
        }
    }
    catch(Exception ex) {
        System.out.println("上传文件时出错!!!");
        ex.printStackTrace();
    }/* 处理完成后,此时所有请求参数存放在 parameters 变量中
       可以通过 (String)parameters.get("xxx") 来读取参数
    */
      

  4.   

    就个人来说,smartupload更好用一点,或者用struts也行,里面已经自带了很多好东东