使用JavaScript压缩包含子文件夹的文件夹

时间:2014-05-08 07:38:35

标签: javascript cordova windows-store-apps

如何使用javascript压缩文件夹 知道我正在制作一个javascript win8商店应用程序,我可以访问客户端PC上的MyDocumnets, 我现在的任务是压缩一个文件夹(保存的应用程序数据)并将其上传到我的服务器?

2 个答案:

答案 0 :(得分:0)

使用纯JavaScript(没有自定义库)没有直接的方法来压缩文件夹,甚至是文件。这是因为JavaScript通常仅限于在DOM中运行。例如,如果某个恶意网站能够让您打开一个带有JavaScript的页面,这样就可以删除计算机上的随机文件,那将是非常糟糕的。

但是,你有一两个选项。现在最接近的事情(再次,不考虑自定义库)是HTML 5 File API。 Support for it across major browsers varies,但大多数较新的版本至少有限,如果不是完全支持它。

使用HTML 5 File API,您可以在浏览器的沙盒环境中访问,编辑和编写文件。基于此,你可以做的是:

  1. 使用HTML 5 File API
  2. 访问您要放入zip的所有文件
  3. 使用.zip格式
  4. 将这些文件中的所有数据写入新文件
  5. 将该文件另存为myfile.zip
  6. 第2部分将会有你的斗争。第1部分和第3部分非常简单。在开始使用HTML 5 File API时,请查看this guide

    另一个可能更好的选择是压缩服务器上的文件,然后将.zip发送到客户端计算机。可能比使用HTML 5 File API容易得多。

答案 1 :(得分:0)

找到一个直接的JS库(很难)的另一种方法是找到一个好的C / C ++库并将其包装在Windows运行时组件中。为了给出一些快速的背景知识,整个WinRT API的编写方式使得可以将API表面区域投影到多种语言,如C ++,C#,VB和JavaScript。此模型是可扩展的,这意味着您可以编写自己的API,其行为方式完全相同。 Visual Studio甚至在C#,VB和C ++语言选项中都有这样的模板。

对于用JavaScript编写的应用程序,这可以实现的是,您只需创建一个小的WinRT组件(它只是一个带有一些元数据的DLL),就可以访问大量非JavaScript本机的其他API。在像C ++这样的语言中, 可以访问更多的API,例如Win32,COM和.NET中的那些。可以在http://msdn.microsoft.com/en-us/library/windows/apps/br205757.aspx上找到适用于Windows应用商店应用的此类API的白名单。

一般来说,对于JS应用程序,您希望在C ++中实现该组件(这是WinRT的实现方式)。虽然在C#或VB中也可以更容易地做到这一点,但最终你需要加载整个CLR并采取大约45MB内存命中的顺序。

因此,如果您可以为C ++找到一个好的ZIP库,并且它使用上一个链接上的白名单API,那么创建一个可以从JavaScript使用的界面的WinRT组件就很简单了。我建议让JS应用程序只传递你想要压缩的StorageFolder,并让它返回要上传的StorageFile。然后,您可以简单地将该StorageFile传递给BackgroundTransfer API(http://msdn.microsoft.com/en-us/library/windows/apps/windows.networking.backgroundtransfer.aspx),您应该将其用于任何重要的传输操作,因为如果您的应用程序被暂停,它将确保它继续。

有关编写WinRT组件的更多详细信息,请参阅我的免费电子书的第18章Programming Windows Store Apps with HTML, CSS, and JavaScript, 2nd Edition。它还详细介绍了如何在这种情况下创建异步API,因为压缩操作可能需要很长时间,而且您不想阻止UI响应。