【问题标题】:Uploading a file in Java Servlet在 Java Servlet 中上传文件
【发布时间】:2013-10-14 17:54:26
【问题描述】:

我有一个 Java 动态 Web 项目,我正在使用 TomCat v7.0。

我是 web 项目的新手,我不太明白如何在我的一个 jsp 页面中上传文件。由于我的项目只是本地的,我想我可以使用一个多部分的形式,人们可以在其中选择文件(这部分很好),然后从我的 Servlet 中检索文件路径。我无法完成这部分,它似乎只给了我文件的名称,而不是它的整个路径。

谁能指出我正确的方向?我已经阅读了几篇关于 Apache 文件上传和从多部分表单中检索信息的文章,但似乎没有任何帮助。

如何从表单中获取文件路径,或者如何获取上传的文件以在我的 Java 类中使用?

提前致谢。

.jsp:

<form method="post" action="upload" enctype="multipart/form-data">
<input type="file" name="filePath" accept="application/vnd.ms-excel, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"></input>
<input type="submit" value="Enviar"></input>
</form>

Java Servlet:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
    PrintWriter out = response.getWriter();
    out.println("<html><body>");

    try
    {
        List<FileItem> items = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request);
        for (FileItem item : items)
        {
            if (item.isFormField())
            {
                // Process regular form field (input type="text|radio|checkbox|etc", select, etc).
                String fieldname = item.getFieldName();
                String fieldvalue = item.getString();

                out.println("<h1>"+fieldname+" / "+fieldvalue+"</h1>");
            }
            else
            {
                // Process form file field (input type="file").
                String fieldname = item.getFieldName();
                String filename = item.getName();
                InputStream filecontent = item.getInputStream();
                String s = filecontent.toString();
                out.println("<h1>"+s+" / "+filename+"</h1>");
                item.write(null);
            }
        }
    }
    catch (FileUploadException e)
    {
        throw new ServletException("Cannot parse multipart request.", e);
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }

    out.println("</body></html>");
}

【问题讨论】:

    标签: java jsp servlets file-upload upload


    【解决方案1】:

    不提供文件路径是浏览器的一项安全功能。

    您的代码 (InputStream filecontent) 中有可用的文件内容,因此您可以使用它或使用 FileItem 上的一种便捷方法,例如

    item.write(new File("/path/to/myfile.txt"));
    

    【讨论】:

    • 您好,感谢您的回答!我认为这种获取文件的方式(使用 InputStream)确实是可行的。但是你能解释一下item.write()的功能是什么吗?
    猜你喜欢
    • 2010-10-31
    • 2012-04-30
    • 2011-10-08
    • 2017-01-28
    • 1970-01-01
    • 1970-01-01
    • 2011-07-17
    • 1970-01-01
    • 2011-10-30
    相关资源
    最近更新 更多