【问题标题】:Multiple file upload in Jsp using Apache commons file upload API使用 Apache commons 文件上传 API 在 Jsp 中上传多个文件
【发布时间】:2011-08-18 17:39:59
【问题描述】:

我无法上传多个文件。我正在使用此代码。这里 itr.hasNext() 返回 false。

文件上传.jsp

<%@ page import="java.util.*" %>
   <%@ page import="java.util.Iterator" %>
   <%@ page import="java.io.File" %>
   <%@ page import="org.apache.commons.fileupload.servlet.*" %>
   <%@ page import="org.apache.commons.fileupload.disk.*"%>
   <%@ page import="org.apache.commons.fileupload.servlet.ServletFileUpload"%>
   <%@ page import="org.apache.commons.fileupload.disk.DiskFileItemFactory"%>
   <%@ page import="org.apache.commons.fileupload.*"%>
   <%@ page contentType="text/html;charset=UTF-8" language="java" %>
   <center>
<table border="2">
        <tr>
        <td>
        <h1>Your files  uploaded </h1>
        </td>
        </tr>
   <%
 boolean isMultipart = ServletFileUpload.isMultipartContent(request);
    System.out.println("isMultipart="+isMultipart);
    System.out.println(config.getServletContext());

           FileItemFactory factory = new DiskFileItemFactory();
           ServletFileUpload upload = new ServletFileUpload(factory);
           System.out.println(upload.parseRequest(request));    
           List items=null;
           try {
                items = upload.parseRequest(request);
           } catch (FileUploadException e) {
                   e.printStackTrace();
           }
           Iterator itr = items.iterator();
           while (itr.hasNext()) {
           FileItem item = (FileItem)(itr.next());
           out.println("itr");
           if (item.isFormField()) {
                    try{
                        String field=item.getFieldName();
                        String value=item.getString();
                        System.out.println("field="+value);
                    }
                    catch(Exception e){}
           } 
           else {
                   try {
                       out.println("nor done");
                           String itemName = item.getName();
                           out.println("1done");
                           File savedFile = new File("/home/saurabh/assignments/"+itemName);
                           item.write(savedFile);  
                           out.println("done");
                   } catch (Exception e) {
                           e.printStackTrace();
                   }
           }
           }

   %>
    </table>
   </center>

html文件是:-

<html>
 <head><title>Upload page</title></head></p> <p><body>
 <form action="FileUpload.jsp" method="post" enctype="multipart/form-data" name="form1" id="form1">
   <center>
   <table border="2">
       <tr>
               <td align="center"><b>Multipale file Uploade</td>
           </tr>
       <tr>
               <td>
                       Specify file: <input name="file" type="file" id="file">
                   <td>
           </tr>
           <tr>
              <td>
                     Specify file:<input name="file" type="file" id="file">
                  </td>
        <tr>
                   <td>
                      Specify file:<input name="file" type="file" id="file">
                   </td>
                 </tr>
                 <tr>
                    <td align="center">
               <input type="submit" name="Submit" value="Submit files"/>
                        </td>
                 </tr>
    </table>
        <center>
 </form>
 </body>
 </html>

这是怎么引起的,我该如何解决?

【问题讨论】:

    标签: java jsp file-upload


    【解决方案1】:

    您解析了两次请求。第一次打印物品,第二次真正拿到物品进行加工。这是行不通的。只能解析一次。

    删除下面无用的行

    System.out.println(upload.parseRequest(request));  
    

    如果您出于某种原因确实打算打印已解析的项目,那么您应该这样做

    System.out.println(items);
    

    你已经在 try 块内解析了一次请求。


    与具体问题无关,JSP 不是这项工作的最佳场所。在 servlet 中完成这项工作,并将结果收集到您放在请求范围内的某个映射/bean 中,然后将请求转发到 JSP 以显示结果。

    【讨论】:

    • 这是正确的,它不应该在 jsp 中完成,因为它仅用于表示逻辑,但我想知道为什么这不起作用??
    • 你明白“无关”的意思了吗?您是否阅读了我回答的主要部分?您正在解析请求两次。在第一次解析时,您只是打印解析的项目,而不是将其分配给变量。在第二次解析项目时,它不会再返回任何东西。网络浏览器即不会再次重新上传文件。
    猜你喜欢
    • 2010-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-03
    • 2011-07-31
    • 2011-01-10
    相关资源
    最近更新 更多