【发布时间】:2012-08-24 08:45:20
【问题描述】:
我正在使用 httpclient-4 使用以下代码将流的内容(在本例中为大文件)发送到我的 Tomcat 的上传 servlet:
HttpRequest httpRequest = new HttpPut(destination);
InputStreamEntity entity = new InputStreamEntity(inputStream, contentLength);
((HttpPut)httpRequest).setEntity(entity);
httpClient.execute(httpRequest,handler);
效果很好。我后来添加了一个身份验证机制,以防止未经授权的用户上传文件。如果有人尝试在未经身份验证的情况下上传,则 servlet 会直接以
response.sendError(HttpServletResponse.SC_FORBIDDEN)
甚至不处理请求的 InputStream。
我面临的问题是,尽管请求在服务器端被拒绝,但我的客户端继续发送 InputStream 的全部内容,导致网络使用完全无用。
我查看了 httpclient 的文档,但遗憾的是没有找到任何关于这一点的信息。我还查看了tomcat方面是否可以中止请求,但it doesn't seem possible。
这种情况有没有办法取消流的上传?
我们将不胜感激。
谢谢
【问题讨论】:
-
Here 是使用 apache common-file-update 的示例。
-
@Santosh 感谢您的链接,但我不能使用它,因为我不使用文件,而是直接使用流。事实上,如果用户被授权这样做,流的内容会被分割成块并直接重定向到 Voldemort 后端进行存储。
标签: java tomcat apache-httpclient-4.x