Javascript 从非公用文件夹(php)获取zip文件

Javascript 从非公用文件夹(php)获取zip文件,javascript,php,zip,Javascript,Php,Zip,我的web服务器的非公用文件夹中有一个zip文件。我想让公众无法访问该文件,因此我希望使用php readfile来读取zip文件,并在javascript中从zip文件创建一个文件对象。我不确定这是否是做类似事情的最佳方式,但如果有任何建议,我将不胜感激 如何使用返回的数据构造文件对象 以下是我的php代码(getZipFile.php): 我注意到的一件事是原始Zip文件的大小是2302字节,当我在success函数中打印data.length时,数据长度是2287。它们是否应该相同?美元缓

我的web服务器的非公用文件夹中有一个zip文件。我想让公众无法访问该文件,因此我希望使用php readfile来读取zip文件,并在javascript中从zip文件创建一个文件对象。我不确定这是否是做类似事情的最佳方式,但如果有任何建议,我将不胜感激

如何使用返回的数据构造文件对象

以下是我的php代码(getZipFile.php):


我注意到的一件事是原始Zip文件的大小是2302字节,当我在success函数中打印data.length时,数据长度是2287。它们是否应该相同?

美元缓冲区从何而来?此外,如果您似乎没有发送文件,则应添加:

echo readfile($filepath . $filename);

您还可以添加一些控件来检查文件是否存在,但这超出了问题的范围。

我最终使用XMLHttpRequest来处理请求,并指定blob作为返回数据类型。这是我的最终代码

php代码:

<?php
ob_start();
$filename = "abc.zip";
$filepath = "/path/to/zip/";
$zip = $filepath . $filename;
header("Content-type: application/zip");
header("Content-Length: ".filesize($filepath.$filename));
ob_clean(); 
flush();
readfile($filepath . $filename);
exit;

您好,很抱歉,我的原始代码中缺少一行代码。我有$buffer=readfile($filepath.$filename);在echo$buffer之前。它给我的是一个空的响应文本。请尝试:if(realpath($filepath.$filename)){readfile($filepath.$filename);}else{throw new Exception($error reading file');}谢谢,我的文件路径意外地不正确,这解释了为什么它给出了一个空的响应字符串。在调用readfile之前,我应该按照您的建议先检查文件是否存在。我仍然对读取文件的javascript代码有一些问题。。。。zip文件作为文件对象创建后,似乎没有正确加载。。也许parts变量有问题?对不起,我对文件对象不了解。我希望你能得到答案。
echo readfile($filepath . $filename);
<?php
ob_start();
$filename = "abc.zip";
$filepath = "/path/to/zip/";
$zip = $filepath . $filename;
header("Content-type: application/zip");
header("Content-Length: ".filesize($filepath.$filename));
ob_clean(); 
flush();
readfile($filepath . $filename);
exit;
var oReq = new XMLHttpRequest();
oReq.open("GET", "getZipFile.php", true);
oReq.responseType = "blob";
oReq.onload = function(oEvent) {
    var data = oReq.response;
    var f = new File([data], "myzip.zip", {
        lastModified: new Date(0),
        type: "application/zip"
    });
};
oReq.send();