我注意到在询问如何之前有一个问题 " 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文件下载。
我该怎么做?
答案 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或其他服务器。