在 Angular 中,如何在上传前验证 zip 文件的密码

In Angular, how to just verify the password of a zip file before upload

我正在开发一个应用程序,用户可以在其中上传始终受密码保护的 zip 文件。 我有一个文件上传器和一个用于该密码的简单文本输入。

目前仅在文件上传后在 BE 中检查密码(这可能需要几分钟,因为文件可能有几 GB),当密码不正确时,用户将收到一条申请消息(不是它是如何工作的真的很重要)说 'upload failed, provided wrong password' 他们必须从头开始整个过程​​。

我想做到这一点,即使提供的密码不正确,上传过程也不会开始。 所以;我如何只验证 Angular(9) 中 zip 文件的密码而不提取整个文件?

Whosebug 上的你好!

我想说事先检查密码的有效性并不容易,但有些项目可以帮助你。

原因是浏览器还没有访问文件系统的权限。 (本机文件系统 API 当前处于 chrome 原始试用期,check here 了解更多信息和浏览器兼容性的未来更新)

您可以尝试在浏览器中使用内存文件系统作为替代, 例如 memfs in combination with memfs-webpack.

但请记住:

  • 浏览器限制网页可用的 RAM 量。 如果您的 zip 太大,它可能会使您的网站崩溃!
  • 一个 zip 解压缩过程可能会很长。使用 service worker 将 zip 解压到内存文件系统中。
  • 由于浏览器通常没有文件系统访问权限,因此可能没有能够在浏览器中 运行 的 zip 提取库。您可能需要从 nodejs 移植现有库才能在浏览器中 运行。

我在浏览器中找到了这个页面,它似乎是纯 JavaScript 中的 zip 解压缩:https://zipextractor.app/
他们声称不会将文件发送到任何服务器进行提取,因此您可以在那里找到您自己实现该功能所需的工具。

希望对您有所帮助!
本杰明