我正在使用iframe进行一些异步文件上传,并且想知道是否仅从DOM中修剪iframe是否足以取消上传。

This discussion似乎暗示这对于整个问题而言是一种糟糕的方法,但是令人讨厌的是JS“专家”拒绝透露他的解决方案。

无论如何,删除iframe可以在Gecko + WebKit中使用,但是我想知道人们是否对其他DOM实现有经验。

最佳答案

讨论中的那个家伙不了解他在说什么,IMO。许多人自称为专家,但他们只是空壳的大枪。如果要上传一些异步文件,则可以使用Flash。我通常不推荐Flash,但是SWFUpload小部件是IMO,是目前最好的小部件之一。

http://www.swfupload.org/

除此之外,您可以看一下它,代码很丑陋,但是作者似乎肯定这是跨浏览器的。

http://www.webtoolkit.info/ajax-file-upload.html

要回答您的问题:否,删除iframe并不能保证下载会真正停止,或者不能保证服务器端的下载过程已被有效取消。这是因为从DOM中删除iframe并不能保证某些地方(某处仍未使用它)不会被垃圾回收。

您无需设置iframe,只需设置一个不同的目标url(例如:“ about:blank”)即可,该目标url通常会切断与服务器的连接,并最终停止正在进行的任何数据传输。之后,您可以删除iframe。

但是,我建议您执行一个两步过程,即在其中上传文件以及包含一些哈希值的隐藏字段。该文件存储在服务器上的临时目录中。上载完成后,您将再次发出具有相同哈希值的请求,以验证文件上载完成并完成上载处理。这样可以确保如果中途取消下载,但文件已经上传到服务器,则您只需完成该过程即可,而以后可以通过另一个过程清除临时上载的文件。

第一个解决方案比较简单,但是需要Flash :(

09-15 12:15