【问题标题】:post form contains a file to servletpost 表单包含一个到 servlet 的文件
【发布时间】:2011-08-28 07:37:47
【问题描述】:

当我这样制作时,我想发布一个包含许多字段的表单,其中一个是文件

<form action="MediaManagementServlet" name="addMedia" method="post" enctype="multipart/form-data">
//    many fileds
<label>upload file</label>
<input type="file" name="file" id="fileName"/>

它没有到达 servlet,但是当我这样做时

<form action="MediaManagementServlet" name="addMedia" method="post" >

它到达了servelet,但是当我得到文件的参数时它打印 null ?

对我来说隐藏的点在哪里?

【问题讨论】:

    标签: jsp servlets file-upload


    【解决方案1】:

    在这两种情况下它都应该到达 servlet。您可能没有运行您认为正在运行的代码,或者误解了结果,或者有一些 JavaScript 接管了提交但没有正确处理它。保存、重建、重新部署和重新启动一切。 getParameter() 仅针对第一种情况下的所有字段和第二种情况下的文件返回 null。

    关于null参数问题,当使用multipart/form-data编码时,数据不会作为标准的application/www-form-urlencoded请求正文中的查询字符串发送。相反,它在请求正文中作为multipart/form-data 块发送。 getParameter() 和配偶不承认这一点,因此他们都返回 null。您需要改用getParts()。

    Collection<Part> parts = request.getParts();
    // Loop through it and collect manually.
    

    或者当你还在使用旧的 Servlet 2.5 或之前的版本时,你需要使用Apache Commons FileUpload 来解析它。

    另见:

    【讨论】:

    • 取决于目标运行时(servletcontainer)的品牌/版本。例如。 Tomcat 7、Glassfish 3、JBoss AS 6 等都支持 Servlet 3.0。如果他们这样做,那么您应该确保您的 web.xml 也被声明为符合 Servlet 3.0。这样getParts() 就可用了。
    • 是的,这里是 ,好的,我现在试试。
    • @BalusC,我需要重新启动每件事:(,我试过了,我得到了表单中所有部件的名称,但是我怎样才能得到这些值?
    • Part#getInputStream() 提供。单击“另请参阅”链接以获取示例。我发布这些链接不仅仅是为了装饰,它们确实包含有用的背景信息 :) 但是我个人必须承认,使用 Apache Commons FileUpload 比使用 Servlet 3.0 API 更简洁。 FileUpload 提供了方便的方法来直接获取String 等值。再次单击示例的“另见”链接。
    • @BalusC,我尝试了很多东西,InputStream 用于文件,我想在 servlet 中获取常用参数??表单包含许多信息,而不是文件,你明白我的意思吗? InputStream 不打印文本字段的值
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-05
    • 1970-01-01
    • 1970-01-01
    • 2012-05-01
    相关资源
    最近更新 更多