2012-06-04 73 views
0

以及我试图从Web界面上传文件到我的servlet。我一直在使用Apache Commons FileUpload,通过遵循教程并将其集成到我的servlet中。不知怎的,我无法设法上传文件。为什么我的文件没有上传到我的java servlet?

这里是我的网页表单:

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

那么这里应该处理来自请求的文件上传的servlet我的代码部分:

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服务器日志我从这个servlet方法得到:

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 rom请求通过使用: 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作家 HtmlWriter writer = new HtmlWriter(); PrintWriter out = response.getWriter(); //获取操作参数,知道用户当前在哪里导航 action = request.getParameter(actionText); System.out.println(“Action:”+ action); –

回答

4

当请求主体已经事先通过调用非常相同的servlet的doPost()方法内部或的一个的doFilter()方法中的requestgetParameter()getReader()getInputStream()方法解析将失败这种方式servlet过滤器也运行在相同的请求上。另一个可能的原因是您嵌套HTML <form>元素,但行为依赖于浏览器。

顺便说一句,HTML <center>元素是已弃用自1998年以来。摆脱它,并使用CSS来代替。


更新:您的更新确认你正在呼吁requestgetParameter()。你应该不是这样做,当它是multipart/form-data请求。您应该使用完全相同的Apache Commons FileUpload API来收集标准表单字段。另请参阅How to upload files to server using JSP/Servlet?

相关问题