简体   繁体   English

为什么我的文件没有上传到我的Java Servlet?

[英]Why doesn't my file get uploaded to my java servlet?

well I'm trying to upload a file to my servlet from the web interface. 好吧,我正在尝试从Web界面将文件上传到我的servlet。 I've been using Apache Commons FileUpload by following a tutorial and integrating it into my servlet. 通过遵循教程并将其集成到我的servlet中,我一直在使用Apache Commons FileUpload。 Somehow I can't manage to get the file uploaded. 我莫名其妙地无法上传文件。

Here's my form in the web page: 这是我在网页中的表格:

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

Then here's my code part of the servlet that should handle the file upload from the request: 然后,这是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"));
    }
}

And here is the Tomcat server log I get from this servlet method: 这是我从此servlet方法获得的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

Well I'm also getting some parameters from the request by using: action = request.getParameter(actionText); 我还通过使用以下方法从请求中获取一些参数:action = request.getParameter(actionText);

Works fine with normal parameters, but the file doesn't get uploaded. 使用正常参数可以正常工作,但不会上传文件。 I believe after parsing the list should have one item in this case, it shows 0... 我相信在这种情况下,解析列表后应该有一个项目,它显示为0 ...

Can anyone help? 有人可以帮忙吗? Thanks. 谢谢。

The full log is this? 完整的日志是这个吗?

 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

It will fail that way when the request body has already been parsed beforehand by calling getParameter() , getReader() or getInputStream() methods on the request inside the doPost() method of the very same servlet or inside the doFilter() method of one of the servlet filters which also runs on the same request. 如果事先通过在非常相同的servlet的doPost()方法内或在doFilter()方法内对request调用getParameter()getReader()getInputStream()方法来解析请求主体,则将失败。 Servlet过滤器之一,它也可以在同一请求上运行。 Another possible cause is that you're nesting HTML <form> elements, but the behaviour is browser dependent. 另一个可能的原因是您要嵌套HTML <form>元素,但是其行为取决于浏览器。

By the way, the HTML <center> element is deprecated since 1998. Get rid of it and use CSS instead. 顺便说一句,自1998年以来, 不推荐使用 HTML <center>元素。将其删除,改用CSS。


Update : your update confirms that you're calling getParameter() on the request . 更新 :您的更新确认您正在对request调用getParameter() You should not do that when it's a multipart/form-data request. 当它是一个multipart/form-data请求时,您不应这样做。 You should instead use the very same Apache Commons FileUpload API to collect normal form fields. 您应该改用完全相同的Apache Commons FileUpload API来收集常规表单字段。 See also How to upload files to server using JSP/Servlet? 另请参阅如何使用JSP / Servlet将文件上传到服务器?

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM