m90*_*m90 2 javascript php jquery zip download
我正在网页上进行以下操作:单击元素会将一组数据(附加到元素)发送到我的服务器,然后生成一个自定义zip文件:
$.post(urlprefix + 'makeZip.php', params, function(data){
window.location = urlprefix + 'getZip.php?file=' + data; //get file
}).error(handleAJAXError);
Run Code Online (Sandbox Code Playgroud)
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);
Run Code Online (Sandbox Code Playgroud)
所有浏览器都会成功下载文件,但我遇到一个问题:文件可能会变得相当大(高达200MB),所以我认为估计下载的时间会很好.这就是我发送Content-Length标题的原因(指定的文件大小是正确的).然而,我测试过的所有浏览器都告诉我文件大小是未知的(这可能导致用户跳过下载).
这是我的标题信息的某种问题吗?这是客户端问题吗?我应该使用其他方法让客户端下载文件吗?
如果通过下载提供ReadFile的文件时,在客户端显示的对话框中的"未知文件大小",你最好检查mod_deflate,mod_gzip,mod_something-that-shrinks-http已安装在服务器上,并把异常给定下载.
更多信息在这里
由m90 编辑:
在我的特定情况下(运行Apache),我通过使用以下方式缩小了收缩:
@apache_setenv('no-gzip', 1);
@ini_set('zlib.output_compression', 0);
Run Code Online (Sandbox Code Playgroud)
现在可以在所有浏览器中正确发送和接收Filesize标头
| 归档时间: |
|
| 查看次数: |
3110 次 |
| 最近记录: |