servlet如何确定何时取消上传?

时间:2012-03-20 21:52:40

标签: java javascript servlets

以下是基于表单的上传的javascript方面的一些代码:

iframe.setAttribute('src', 'javascript:false;');

我正在使用上面的代码来取消与放置在iframe中的输入元素相关联的正在进行的上传。

我正在使用以下代码取消通过XHR发送的正在进行的上传:

myxhr.abort();

在这两种情况下,都不会向servlet发送更多字节。我正在努力的部分是在servlet方面。目前,我无法找到servlet实例确定用户是否取消上传的方法。这很关键,否则servlet将继续处理部分上载的文件,就好像它是有效的一样。

如何通过HttpServletRequest确定用户是否已取消上传?

3 个答案:

答案 0 :(得分:2)

带有数据的POST请求包含Content-Length标题,告诉您要上传的数据的大小。

因此,当数据停止进入您的服务器并且收到的数据大小低于预期时 - 这意味着用户(或某些网络故障)已取消上传。

答案 1 :(得分:1)

如果上传被取消,浏览器将关闭连接,导致servlet端出现IO异常。例如,在Tomcat中,它将显示“Connection by peer”,这是ClientAbortException。其他服务器以不同方式包装IOException。 Point只是捕获IOException,你应该能够按照自己的意愿处理它。

使用内容长度是不可靠的,因为HTTP规范不要求POST的内容长度标题 - 或者GET的内容长度标题。要点是,除非您确定您的javascript XHR明确设置了标头,否则此方法将无效。

或者你可以自己计算并设置它以确保,或者甚至更好地将你自己的字符流附加到XHR中的发布数据的末尾,一些独特的字符串,例如“jh923k49sk $ 2#%'。在servlet中,剪掉入站邮件的最后14个字符并检查字符串。如果它是相同的,你知道它们没有取消。

答案 2 :(得分:0)

我看不出你怎么知道,只是因为请求流已经结束,无论是完成还是取消。必须有一个单独的HTTP请求来指示取消,该请求必须包含与上载相关联的一些令牌或ID,因为HTTP是无状态且幂等的。