再次重新下载zip文件而不重写zip文件 - ZipArchive PHP

时间:2017-04-21 03:04:36

标签: javascript php html ziparchive

所以我创建了一些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);

1 个答案:

答案 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));
  }
});