【问题标题】:how to get string parameter from request when using multipart/form-data? [duplicate]使用 multipart/form-data 时如何从请求中获取字符串参数? [复制]
【发布时间】:2012-05-09 21:02:54
【问题描述】:

我制作 html 页面来上传带有描述形式的文本框的图像。 我使用了 multipart/form-data ;在servlet的dopost中,我使用 ServletFileUpload 上传 = 新的 ServletFileUpload();

为了获取字符串参数,我使用了 request.getparameter(); 但它总是给我NULL ??? 我怎样才能得到它??

html ::

<form name="filesForm" action="/upload" method="post" enctype="multipart/form-data">

File : <input type="file" name="file">  
<textarea name = "description"  
 rows = "4" cols = "30">Enter comments here.</textarea>
<input type="submit" name="Submit" value="Upload File">

在小服务程序上:

ServletFileUpload upload = new ServletFileUpload(); 
upload.setSizeMax(500000000);
 FileItemIterator iterator = null;
    try {
        iterator = upload.getItemIterator(req);
    } catch (FileUploadException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } //  to handle contents or 
    // instances  of request.
    FileItemStream item = null;
    try {
        item = iterator.next();
    } catch (FileUploadException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } // get  access each item on iterator.
    java.io.InputStream in = item.openStream(); // allows to read the items contents. 


    Blob imageBlob = new Blob(IOUtils.toByteArray(in)); // store each item on Blob 


    // object after converting them to Bytes.
    /*……….
    Note: we are concerned on uploading images files. So the type of files is either (.jpg or gif)
    ……….
    */
    PersistenceManager pm = PMF.get().getPersistenceManager();
    String counter="1";
    ServletOutputStream outt = resp.getOutputStream();
     //match incoming request Content type and invoke appropriate method for handel request

【问题讨论】:

    标签: html google-app-engine servlets file-upload servlet-filters


    【解决方案1】:

    因为当你有表单enctype="multipart/form-data"。使用request.getParameter("paramnName"); 无法获取其他表单字段。它总是会给你NULL。

    您必须使用FormItemisFormField() 来检查其是否为常规字段或文件。

    例子:

            try {
                ServletFileUpload upload = new ServletFileUpload();
                response.setContentType("text/plain"); 
    
                FileItemIterator iterator = upload.getItemIterator(request);
    
                while (iterator.hasNext()) {
                  FileItemStream item = iterator.next();
    
                  InputStream stream = item.openStream();
    
                  if (item.isFormField()) {
                      System.out.println("Got a form field: " + item.getFieldName()  + " " +item);
    
                  } else{
                      System.out.println("Got an uploaded file: " + item.getFieldName() +
                              ", name = " + item.getName());
                    int len;
                    byte[] buffer = new byte[8192];
                    while ((len = stream.read(buffer, 0, buffer.length)) != -1) {
    
                      response.getOutputStream().write(buffer, 0, len);
    
                    }
    
                }
    
            }
    } catch (FileUploadException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    

    【讨论】:

    • 怎么样?能给我举个例子吗???
    • 我尝试过,但现在它给了我例外
    • java.lang.NoClassDefFoundError: java.rmi.server.UID 是一个受限类。有关详细信息,请参阅 Google App Engine 开发人员指南。在 com.google.appengine.tools.development.agent.runtime.Runtime.reject(Runtime.java:51) 在 org.apache.commons.fileupload.disk.DiskFileItem.(DiskFileItem.java:103) 在 org .apache.commons.fileupload.disk.DiskFileItemFactory.createItem(DiskFileItemFactory.java:196) 在 org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:358)
    • 我猜你不能使用DiskFileItemFactoryGAE。检查此链接stackoverflow.com/questions/9501527/… 并编辑示例
    • System.out.println("Got a form field: " + item.getFieldName() + " " +item); 行不打印相应表单字段的值。请问如何获取表单字段的值?
    【解决方案2】:

    添加答案并解决问题@Sayo Oladeji

    要获取输入字段的值,您可以使用以下命令:

    System.out.println("Got a form field: " + item.getFieldName()  + " " + Streams.asString(stream));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多