0

我正在尝试处理文件上传,并且正在使用 com.oreilly.servlet.multipart.MultipartParser 类来解析发布的数据(在 cos.jar 中)。但是,当我调用 MultipartParser 的构造函数时,我得到了这个异常:

java.io.IOException: Corrupt form data: premature ending
    at com.oreilly.servlet.multipart.MultipartParser.<init>(MultipartParser.java:166)
    at com.oreilly.servlet.multipart.MultipartParser.<init>(MultipartParser.java:94)

有没有人见过这个?根据我的阅读,这意味着数据在找到它正在寻找的边界之前就结束了。我怎样才能解决这个问题?

我正在使用 cos.jar 1.0 版。

谢谢!

4

2 回答 2

1

http://www.servlets.com/cos/faq.html

这表明解析客户端提交的 POST 请求时出现问题。导致问题的原因可能有很多:

  • 客户端点击了停止按钮(不是真正的问题,但确实会导致过早结束)
  • Web 表单中的错误
  • servlet 中的错误
  • Web 服务器中的错误
  • 浏览器中的一个错误
  • com.oreilly.servlet 库本身的一个错误

历史表明,Web 服务器是最常见的问题原因,这可能是因为有很多不同的服务器,而且似乎很少有供应商测试他们的二进制上传能力。

首先,确保您的客户没有按下停止按钮。然后,检查您的问题是否已发布在此站点上的“您需要了解的 Servlet 错误”资源上。如果它不为人所知,那么您将成为第一个了解它的人!您可以在这里与我们分享您的发现!

其次,使用提供的 upload.html 表单和 DemoRequestUploadServlet.java 类查看上传是否有效。有些人在他们的表单中发现了导致问题的错误。测试这种组合将看看是否是这种情况。一位用户 Duke Takle 发现此异常是由重定向引起的:I was experiencing the same "premature ending" as Albert Smith. What I've found is that the problem was isolated to I.E. 5.0. The application that troubled me was doing a redirect after the construction of a MultipartRequest. It looks like this construction went well except on I.E. 5.0 the browser attempted to make the request again and by that time the ServletInputStream was empty. I've modified the application to simply write the needed response instead of redirecting. This problem was observed and fixed as described in Tomcat 4.0 and Weblogic 6.1. Other users have found bugs in their handling servlet where they call request.getParameter() instead of multipartRequest.getParameter(), and some servers falsely read the input stream when their getParameter() is called causing an "unexpected end of part".

于 2009-02-27T18:36:20.533 回答
1

So, the problem was caused by me calling the MultipartParser constructor twice, by accident. It failed the second time, since the request had already been processed.

于 2009-02-27T18:49:24.260 回答