我使用以下代码使用httpclient-4将流(在本例中是一个大文件)的内容发送到Tomcat的upload 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。
在这种情况下,有没有办法取消上传?
任何真知灼见都将不胜感激。
谢谢
发布于 2012-08-24 23:48:17
这个问题的一个适当的解决方案是在客户端开启所谓的'expect: continue‘握手。较新版本的ApacheApache4.x默认情况下将其禁用。
发布于 2012-08-24 17:43:17
您可以关闭服务器端的InputStream,它将停止传输。
https://stackoverflow.com/questions/12105950
复制相似问题