在Jsp中使用Apache公共文件上传API进行多文件上传 [英] Multiple file upload in Jsp using Apache commons file upload API

查看:155
本文介绍了在Jsp中使用Apache公共文件上传API进行多文件上传的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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



FileUpload.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-8language =java%>
< center>
< table border =2>
< tr>
< td>
< h1>上传您的档案< / 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;
尝试{
items = upload.parseRequest(request);
} catch(FileUploadException e){
e.printStackTrace();
}
Iterator itr = items.iterator(); (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>上传页面< / title>< / head>< / p> < p为H.;<身体GT;
< form action =FileUpload.jspmethod =postenctype =multipart / form-dataname =form1id =form1>
< center>
< table border =2>
< tr>
< td align =center>< b> Multipale档案Uploade< / td>
< / tr>
< tr>
< td>
指定文件:< input name =filetype =fileid =file>
< td>
< / tr>
< tr>
< td>
指定文件:< input name =filetype =fileid =file>
< / td>
< tr>
< td>
指定文件:< input name =filetype =fileid =file>
< / td>
< / tr>
< tr>
< td align =center>
< input type =submitname =Submitvalue =Submit files/>
< / td>
< / tr>
< / table>
< center>
< / form>
< / body>
< / html>

这是如何造成的,我该如何解决这个问题?

您正在解析请求两次。第一次打印的项目和第二次真正得到的项目进行处理。这是不行的。它只能被解析一次。



删除下面的无用行

 的System.out.println(upload.parseRequest(请求)); 

如果你真的打算打印解析项目由于某种原因,那么你应该做的。



  System.out.println(items); 

之后,您已经在 try block。






无关一个JSP不是这份工作的最佳地方。在servlet中执行这项工作,并将结果收集到某个映射/ bean中,然后将其放入请求范围,然后将请求转发给JSP以显示结果。


I am not able to upload multiple files.I am using this code. Here itr.hasNext() is returning false.

FileUpload.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 file is:-

<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>

How is this caused and how can I solve this?

解决方案

You're parsing the request twice. The first time to print the items and the second time to really get the items for processing. This isn't going to work. It can be parsed only once.

Remove the following useless line

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

If you really intend to print the parsed items for some reason, then you should do

System.out.println(items);

after you have parsed the request once inside that try block.


Unrelated to the concrete problem, a JSP is not the best place for this job. Do this job in a servlet and collect the results in some map/bean which you put in the request scope and then forward the request to a JSP to display the results.

这篇关于在Jsp中使用Apache公共文件上传API进行多文件上传的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆