php - 下载文件大小未知,但文件大小存在于标题中

标签 php javascript jquery download zip

我在网页上执行以下操作:单击一个元素会将一组数据(附加到该元素)发送到我的服务器,然后服务器将生成一个自定义 zip 文件:

$.post(urlprefix + 'makeZip.php', params, function(data){
    window.location = urlprefix + 'getZip.php?file=' + data; //get file
}).error(handleAJAXError);

makeZip.php 工作正常并返回客户端应该下载的(临时)zip 文件的名称。因为我想保持服务器清洁,所以我通过另一个名为 getZip.php 的脚本路由文件,该脚本执行以下操作:

/* RETURN REQUESTED FILE AND DELETE FROM SERVER*/
$filename = $_GET['file'];
/* TRANSFER FILE CONTENTS */
header('Content-type: application/zip');
header('Content-Disposition: attachment; filename="customDownload.zip"');
header('Content-Length: '.filesize($filename));
readfile($filename);
/* REMOVE FILE FROM SERVER */
unlink($filename);

所有浏览器都会成功下载该文件,但我面临一个问题:文件可能会变得相当大(高达 200MB),所以我认为最好估计一下下载需要多长时间。这就是为什么我要发送 Content-Length header (指定的文件大小是正确的)。然而,我测试过的所有浏览器都告诉我文件大小未知(这可能会导致用户跳过下载)。

这是我的标题信息的某种问题吗?是客户端问题吗?我应该使用另一种方法让客户端下载文件吗?

最佳答案

如果客户端在下载通过 readfile 提供的文件时在对话框中显示“未知文件大小”,你最好检查是否 mod_deflate, mod_gzip, mod_something -that-shrinks-http 安装在您的服务器上,并为给定的下载设置异常(exception)。

更多信息 here

由 m90 编辑:

在我的特殊情况下(运行 Apache)我通过使用关闭了收缩:

@apache_setenv('no-gzip', 1);
@ini_set('zlib.output_compression', 0);

现在所有浏览器都可以正确发送和接收文件大小 header

关于php - 下载文件大小未知,但文件大小存在于标题中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12457582/

相关文章:

javascript - 使嵌入的 YouTube 播放列表从随机索引开始

javascript - 改变时,划掉表格

javascript - 如何在 PhantomJS 中转到下一页进行抓取

javascript - neo4j - 自动完成 JavaScript

javascript - 捕获 onPaste 并将事件传递给函数 javascript/jQuery

php 和 js//csv 到表(带有附加内容)到 csv

php - 未使用的 mysql 表会影响网站性能吗?

javascript - 在 xPages 部分刷新的自定义控件中加载 javascript 资源

javascript - 删除类时 CSS 转换不起作用

php - 如何格式化(转换)laravel 数据库分页结果?