所以我创建了一些php代码来使用ZipArchive创建一个zip文件。这将创建一个zip文件并下载它。要启动下载,我将链接到包含以下php代码的php文件在iframe中。然后将此iframe插入到html文档中。
因此,无论何时加载html文档,都会启动下载程序。我在iframe标签中创建了onload属性,该属性将调用一个函数来显示重新下载按钮。
因此,如果用户单击重新下载按钮,我希望它再次下载相同的zip文件,但不会再次重新创建zip文件进程。我该怎么做?
谢谢!
我的HTML代码:
<iframe src="phpfile.php" onload="myFrameLoad(this)"></iframe>
phpfile.php的我的PHP代码:
$coreFiles = Array('blah.jpg', 'blo.png');
# create new zip object
$coreZip = new ZipArchive();
# create a temp file & open it
$tmp_file = tempnam('.','');
$coreZip->open($tmp_file, ZipArchive::CREATE);
# loop through each file
foreach($coreFiles as $coreFile){
# download file
$download_file = file_get_contents($coreFile);
#add it to the zip
$coreZip->addFromString(basename($coreFile),$download_file);
}
# close zip
$coreZip->close();
# send the file to the browser as a download
header('Content-disposition: attachment; filename=myZipFolder.zip');
header('Content-type: application/zip');
readfile($tmp_file);
答案 0 :(得分:0)
您可以使用=IIF(RowNumber(Fields!ResponsesID.Value)=1,Fields!AgentID.Value,"")
或XMLHttpRequest()
将文件设为fetch()
,使用Blob
创建Blob URL
,将参考存储为URL.createObjectURL()
。在元素的后续Blob URL
元素检查是否定义了click
,如果Blob URL
,请true
作为第一个参数window.open()
,Blob URL
作为第二个参数。该方法应该在客户端浏览器中将该文件的单个副本存储为"_self"
,直到用户关闭创建该引用的Blob URL
。
html
document
的javascript
<button>download</button>
不支持fetch()
let url = w = void 0;
document.querySelector("button").addEventListener("click", e => {
if (url) {
w = window.open(url, "_self")
}
else {
fetch("phpfile.php")
.then(response => response.blob())
.then(blob => {
url = URL.createObjectURL(blob);
w = window.open(url, "_self")
})
.catch(err => console.error(err));
}
});