【发布时间】:2021-12-08 21:27:50
【问题描述】:
我正在开发一个用户提供图像文件-文本序列的 web 应用程序。我正在将序列压缩成单个 ZIP 文件 uisng JSZip。
在服务器上,我只是在检查文件上传错误状态后使用 PHP move_uploaded_file 到所需的位置。
以这种方式创建的测试 ZIP 文件可以是 found here。我已经下载了文件,在 Windows 资源管理器中展开它并验证了它的内容(在这个实例中是两个图像和一些 HTML 标记)都存在且正确。
到目前为止一切顺利。当我尝试获取相同的 ZIP 文件并使用JSZip.loadAsync 扩展它时,问题就开始了,它始终报告Corrupted zip: missing 210 bytes。我用于返回 ZIP 文件的 PHP 代码实际上非常简单。省略了我进行的各种安全检查,该代码的基本部分如下所列
if (file_exists($file))
{
ob_clean();
readfile($file);
http_response_code(200);
die();
} else http_response_code(399);
399 代码在我的 web 应用程序中被解释为需要在本地创建新资源而不是尝试读取现有资源数据。当我使用结果文本(在 200 的 HTTP 响应上)并将其提供给 JSZip.loadAsync 时,就会出现问题。
我在这里做错了什么?我认为我在 PHP 端使用 readfile 的方式有些过于天真,但我无法弄清楚那可能是什么。
【问题讨论】: