2012-06-04 8 views
0

Я пытаюсь загрузить файл на свой сервлет из веб-интерфейса. Я использую Apache Commons FileUpload, следуя учебному курсу и интегрируя его в свой сервлет. Как-то мне не удается загрузить файл.Почему мой файл не загружается в мой сервлет Java?

Вот моя форма на веб-странице:

<form class="well" action="GenTreeUploader" method="post" enctype="multipart/form-data"> 
     <label>Choose your file:</label> 
     <center><input type="file" class="input-xlarge" name="wordfile"></center><br> 
     <center><span class="help-block">Note: after clicking "Upload file!" all of the data contained in the file will be uploaded to the database</span></center><br> 
     <center><input class="btn btn-primary" type="submit" value="Upload file!"></center> 
     <input type="text" name="tester" value="xoxoxo" /> 
     <input type="hidden" name="action" value="startUpload" /> 
    </form> 

Тогда вот мой код часть сервлета, который должен обрабатывать загрузку файлов из запроса:

public void artiUpload(HttpServletRequest request, HttpServletResponse response, HtmlWriter writer) throws ServletException, IOException { 
    System.out.println("I'm in upload"); 
    PrintWriter out = response.getWriter(); 
    // Check that we have a file upload request 
    boolean isMultipart = ServletFileUpload.isMultipartContent(request); 
    // Create a factory for disk-based file items 

    // Create a factory for disk-based file items 
    DiskFileItemFactory factory = new DiskFileItemFactory(); 

    // Set factory constraints 
    factory.setSizeThreshold(maxMemSize); 
    factory.setRepository(new File(htmlPath.toString())); 
    System.out.println("File path: " + htmlPath.toString()); 

    // Create a new file upload handler 
    ServletFileUpload upload = new ServletFileUpload(factory); 

    // Set overall request size constraint 
    upload.setSizeMax(maxFileSize); 
    System.out.println("Max file size: " + maxFileSize); 
    System.out.println("Max file size in memory: " + maxMemSize); 
    List items = null; 
    try { 
     // Parse the request 
     items = upload.parseRequest(request); 
     System.out.println("Items found: " + items.size()); 
     out.write(writer.printCenter("File uploading done")); 
    } catch (FileUploadException ex) { 
     Logger.getLogger(GenTreeUploader.class.getName()).log(Level.SEVERE, null, ex); 
     out.write(writer.printCenter("File uploading failed")); 
    } 
} 

А вот сервер Tomcat я получаю из этого метода сервлетов:

I'm in upload 
File path: D:\Dropbox\StudiesNew\NetbeansProjects\GenTreeUploader\build\web\WEB-INF\classes\Html 
Max file size: 10485760 
Max file size in memory: 2097152 
Items found: 0 

Ну, я также получаю некоторые параметры f введите запрос: action = request.getParameter (actionText);

Работает нормально с обычными параметрами, но файл не загружается. Я считаю, что после разбора списка должен быть один элемент в этом случае, он показывает 0 ...

Может ли кто-нибудь помочь? Благодарю.

Полный журнал это?

Using CATALINA_BASE: "C:\Users\Arturas\.netbeans\7.1.2\apache-tomcat-7.0.22.0_base" 
Using CATALINA_HOME: "C:\Program Files\Apache Software Foundation\Apache Tomcat 7.0.22" 
Using CATALINA_TMPDIR: "C:\Users\Arturas\.netbeans\7.1.2\apache-tomcat-7.0.22.0_base\temp" 
Using JRE_HOME:  "C:\Program Files\Java\jdk1.7.0_03" 
Using CLASSPATH:  "C:\Program Files\Apache Software Foundation\Apache Tomcat 7.0.22\bin\bootstrap.jar;C:\Program Files\Apache Software Foundation\Apache Tomcat 7.0.22\bin\tomcat-juli.jar" 
Bir 05, 2012 2:45:06 AM org.apache.catalina.core.AprLifecycleListener init 
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Program Files\Java\jdk1.7.0_03\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:\Program Files\Common Files\Microsoft Shared\Windows Live;C:\Program Files (x86)\Common Files\Microsoft Shared\Windows Live;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\Windows Live\Shared;C:\Program Files\Microsoft SQL Server\110\Tools\Binn\;C:\Program Files (x86)\Microsoft SQL Server\110\Tools\Binn\;C:\Program Files\Microsoft SQL Server\110\DTS\Binn\;C:\Program Files (x86)\Microsoft SQL Server\110\Tools\Binn\ManagementStudio\;C:\Program Files (x86)\Microsoft SQL Server\110\DTS\Binn\;C:\Program Files\MATLAB\R2010b\runtime\win64;C:\Program Files\MATLAB\R2010b\bin;. 
Bir 05, 2012 2:45:07 AM org.apache.coyote.AbstractProtocol init 
INFO: Initializing ProtocolHandler ["http-bio-8084"] 
Bir 05, 2012 2:45:07 AM org.apache.coyote.AbstractProtocol init 
INFO: Initializing ProtocolHandler ["ajp-bio-8009"] 
Bir 05, 2012 2:45:07 AM org.apache.catalina.startup.Catalina load 
INFO: Initialization processed in 865 ms 
Bir 05, 2012 2:45:07 AM org.apache.catalina.core.StandardService startInternal 
INFO: Starting service Catalina 
Bir 05, 2012 2:45:07 AM org.apache.catalina.core.StandardEngine startInternal 
INFO: Starting Servlet Engine: Apache Tomcat/7.0.22 
Bir 05, 2012 2:45:07 AM org.apache.catalina.startup.HostConfig deployDescriptor 
INFO: Deploying configuration descriptor GenTreeUploader.xml from C:\Users\Arturas\.netbeans\7.1.2\apache-tomcat-7.0.22.0_base\conf\Catalina\localhost 
Bir 05, 2012 2:45:08 AM org.apache.catalina.startup.HostConfig deployDescriptor 
INFO: Deploying configuration descriptor manager.xml from C:\Users\Arturas\.netbeans\7.1.2\apache-tomcat-7.0.22.0_base\conf\Catalina\localhost 
Bir 05, 2012 2:45:08 AM org.apache.catalina.startup.HostConfig deployDescriptor 
INFO: Deploying configuration descriptor mrweb.xml from C:\Users\Arturas\.netbeans\7.1.2\apache-tomcat-7.0.22.0_base\conf\Catalina\localhost 
Bir 05, 2012 2:45:08 AM org.apache.catalina.startup.HostConfig deployDescriptor 
INFO: Deploying configuration descriptor ROOT.xml from C:\Users\Arturas\.netbeans\7.1.2\apache-tomcat-7.0.22.0_base\conf\Catalina\localhost 
Bir 05, 2012 2:45:08 AM org.apache.coyote.AbstractProtocol start 
INFO: Starting ProtocolHandler ["http-bio-8084"] 
Bir 05, 2012 2:45:08 AM org.apache.coyote.AbstractProtocol start 
INFO: Starting ProtocolHandler ["ajp-bio-8009"] 
Bir 05, 2012 2:45:08 AM org.apache.catalina.startup.Catalina start 
INFO: Server startup in 1396 ms 
I'm in upload 
File path: D:\Dropbox\StudiesNew\NetbeansProjects\GenTreeUploader\build\web\WEB-INF\classes\Html 
Max file size: 10485760 
Max file size in memory: 2097152 
Items found: 0 
+0

Вы уже отправили запрос перед вводом этого метода? Установили ли вы регистрацию на уровне отладки и проверили журналы? –

+0

Ну да, вроде как я упомянул: –

+0

// Пользовательский html writer HtmlWriter writer = new HtmlWriter(); PrintWriter out = response.getWriter(); // получить параметр действия, чтобы узнать, где находится пользователь в настоящее время. action = request.getParameter (actionText); System.out.println («Действие:» + действие); –

ответ

4

Это не получится именно так, когда тело запроса уже разобрано заранее по телефону getParameter(), getReader() или getInputStream() метод на request внутри doPost() метода того же сервлета или внутри doFilter() метода одного из сервлет-фильтры, которые также работают по одному и тому же запросу. Другая возможная причина заключается в том, что вы вставляете элементы HTML <form>, но поведение зависит от браузера.

Кстати, элемент HTML <center> является устаревшим с 1998 года. Избавьтесь от него и используйте вместо него CSS.


Update: ваше обновление подтверждает, что вы звоните getParameter() на request. Вы должны не сделать это, когда это multipart/form-data запрос. Вместо этого вы должны использовать тот же API Apache Commons FileUpload для сбора нормальных полей формы. См. Также How to upload files to server using JSP/Servlet?

Смежные вопросы