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

时间:2016-01-15 04:29:43

标签: javascript forms

我注意到在询问如何之前有一个问题 " this commit"

这要求服务器发送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文件下载。

我该怎么做?

1 个答案:

答案 0 :(得分:1)

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

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

function Person(name, location){
   this.name = name;
   this.location = location;
}

Person.prototype.getName = function(){
   return 'Name: ' + this.name;
}

function Emp(id, name, location){
     this.id = id;
     Person.call(this, name);
     Person.call(this, location);
}

Emp.prototype = Object.create(Person.prototype);

var e1 = new Emp(1, 'John', 'London');
e1.id   // 1
e1.name // 'London'
e1.location //undefined

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

这远非理想,我绝对建议使用cookies或其他服务器。