JSZip 在读回以前上传的 zip 文件时报告丢失的字节
JSZip reports missing bytes when reading back previously uploaded zip file
我正在开发一个网络应用程序,用户可以在其中提供图像文件文本序列。我正在将序列压缩成一个 ZIP 文件 uisng JSZip。
在检查文件上传错误状态后,我在服务器上简单地使用 PHP move_uploaded_file
到所需位置。
以这种方式创建的测试 ZIP 文件可以是 found here。我已经下载了文件,在 Windows Explorer 中将其展开并验证其内容(在本例中为两张图片和一些 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
代码在我的 webapp 中被解释为需要在本地创建新资源而不是尝试读取现有资源数据。当我使用结果文本(在 200 的 HTTP 响应上)并将其提供给 JSZip.loadAsync
.
时,问题就发生了
我在这里做错了什么?我认为我在 PHP 端使用 readfile
的方式有些太天真了,但我无法弄清楚那可能是什么。
我们打算做什么
- 尝试从 JavaScript
获取服务器端 ZIP 文件
- 如果它不存在,则发回回复(我只是将自定义 HTTP 响应代码设置为 399 并对其进行解释)告诉客户端去准备它自己的该资源的新本地副本
- 如果确实存在,请发回该 ZIP 文件
到目前为止还不错。然而,将现有的 ZIP 文件读入 PHP 并将其发回是没有意义的 + 充满了问题。我现在的方法是发回 302 的 http_response_code
,客户端将其解释为“直接为自己获取 ZIP”的指令。
此时要“直接”获取 ZIP,只需遵循 MDN 上的 instructions in this tutorial。
我正在开发一个网络应用程序,用户可以在其中提供图像文件文本序列。我正在将序列压缩成一个 ZIP 文件 uisng JSZip。
在检查文件上传错误状态后,我在服务器上简单地使用 PHP move_uploaded_file
到所需位置。
以这种方式创建的测试 ZIP 文件可以是 found here。我已经下载了文件,在 Windows Explorer 中将其展开并验证其内容(在本例中为两张图片和一些 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
代码在我的 webapp 中被解释为需要在本地创建新资源而不是尝试读取现有资源数据。当我使用结果文本(在 200 的 HTTP 响应上)并将其提供给 JSZip.loadAsync
.
我在这里做错了什么?我认为我在 PHP 端使用 readfile
的方式有些太天真了,但我无法弄清楚那可能是什么。
我们打算做什么
- 尝试从 JavaScript 获取服务器端 ZIP 文件
- 如果它不存在,则发回回复(我只是将自定义 HTTP 响应代码设置为 399 并对其进行解释)告诉客户端去准备它自己的该资源的新本地副本
- 如果确实存在,请发回该 ZIP 文件
到目前为止还不错。然而,将现有的 ZIP 文件读入 PHP 并将其发回是没有意义的 + 充满了问题。我现在的方法是发回 302 的 http_response_code
,客户端将其解释为“直接为自己获取 ZIP”的指令。
此时要“直接”获取 ZIP,只需遵循 MDN 上的 instructions in this tutorial。