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

问题描述 投票:0回答:1

好吧,我正在尝试从Web界面将文件上传到我的servlet。 通过遵循教程并将其集成到我的servlet中,我一直在使用Apache Commons FileUpload。 我莫名其妙地无法上传文件。

这是我在网页中的表格:

<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"));
    }
}

这是我从此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

我还通过使用以下方法从请求中获取一些参数: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
java servlets file-upload upload webpage
1个回答
4
投票

如果事先通过在非常相同的servlet的doPost()方法内或在doFilter()方法内对request调用getParameter()getReader()getInputStream()方法来解析请求主体,则将失败。 Servlet过滤器之一,它也可以在同一请求上运行。 另一个可能的原因是您要嵌套HTML <form>元素,但是其行为取决于浏览器。

顺便说一句,自1998年以来, 不推荐使用 HTML <center>元素。将其删除,改用CSS。


更新 :您的更新确认您正在对request调用getParameter() 。 当它是一个multipart/form-data请求时,您不应这样做。 您应该改用完全相同的Apache Commons FileUpload API来收集常规表单字段。 另请参阅如何使用JSP / Servlet将文件上传到服务器?

© www.soinside.com 2019 - 2024. All rights reserved.