仅从客户端检测下载开始/文件传输的开始

Detect start of download start / file transfer from client side only

本文关键字:开始 文件 传输 下载 客户端 检测      更新时间:2023-09-26

我注意到在问如何"检测浏览器何时收到文件下载"。

这需要服务器发送 cookie 才能完成这些步骤。但是,我想检测浏览器是否只在客户端接收文件,因为我无法在服务器端修改任何内容。

遇到的问题是我必须从网站下载许多zip文件。zip 文件是动态生成的,因此在我提交请求之前没有要下载的 URL。首先,我编写一个 for 循环来执行此操作,如下所示。

function myfunc(i){
    setTimeout(function(){
    $("form").submit();
    },2000*(i)
}
for (i=1; i<4; i++) {
myfunc(i);
} //i

但是有可能在浏览器收到第一个文件(i=1)之前,浏览器已经提交了请求第二个文件的表单(i=2)并取消第一个文件的请求。因此,在请求第二个文件之前,我必须确保第一个文件已启动。

ajax似乎不是一个选项,因为它似乎无法处理zip文件下载。

我该怎么做?

编辑:你也可以通过 ajax 调用来获取 zip 的 base64 字符串,然后客户端将其转换为 html5 中的 blob。但这需要在文件服务器端进行base64编码,它将文件大小增加约33%。


我会进行一个 ajax 调用,检查文件是否在使用计时器开始下载后已经生成:

$.ajax({
    type: 'HEAD',
    url: 'generatedfileurl',
    success: function() {
        alert('File found.');
    },
    error: function() {
        alert('File not found.');
    }
});
然后,

当找到文件时,我会等待几秒钟,然后开始下载nr2,因为我假设文件nr1已经在下载,因为它已经生成。

这远非理想,我绝对建议使用 cookie 或其他服务器端的东西。