ArchiveAPI – 读取存档文件内容 + 介绍 Bleeding Edge

长期以来,在 Web 上处理文件一直是一个挑战,当诸如 各种文件 API 出现时,我真的很高兴!现在来看看最新的版本:ArchiveAPI,它提供了处理存档文件的功能。

介绍 Bleeding Edge

在我开始讨论 ArchiveAPI 之前,我想介绍一下 Mozilla Hacks 上的新 Bleeding Edge 类别。这意味着我们涵盖的都是尚未在 Firefox 或任何其他 Web 浏览器正式版本中发布的技术/特性/API。它涵盖了大多数情况下在 Firefox NightlyFirefox Aurora 中首次实现的功能。

目标是让这些功能最终发布,但根据来自您(亲爱的开发者)的反馈或在此阶段发现的任何其他结果,可能会在发布之前对它们进行更改。

因此,欢迎您尝试!您可以抢先了解即将推出的功能,或者有机会影响 Web 开发人员功能的未来。双赢!:-)

是什么

作为 Mozilla WebAPI 计划 的一部分,旨在使 Web 成为一个更加强大的平台,我很幸运地与 ArchiveAPI 的首席开发者 Andrea Marchesini 进行了交谈。基本上,它允许您直接在 Web 浏览器中读取存档文件(例如 ZIP 文件)的内容。

基本上,我们有一个 ArchiveReader 对象,当它成功读取存档文件的内容时,我们可以遍历它们,读取文件数据,显示每个文件内容的预览等等。

var archiveFile = new ArchiveReader(archiveFileReference),
    fileNames = archiveFile.getFilenames();

当您触发该文件的操作/方法(例如 getFilenames)时,您将有两个处理程序:onsuccessonerror。就像这样

fileNames.onerror = function () {
    console.log("Error reading filenames");
};

fileNames.onsuccess = function (request) {
    // Get list of files in the archive
    var result = this.result;

    // Iterate over those files
    for (var i=0, l=result.length; i<l; i++) {
        file = archiveFile.getFile(result[i]);

        file.onerror = function () {
            console.log("Error accessing file");
        };

        file.onsuccess = function () {
            // Read out data for that file, such as name, type and size
            var currentFile = this.result;
            console.log(currentFile.name);
        }
    }
}

演示

我整理了一个 ArchiveAPI 演示,您可以在其中上传一个存档文件,对于该存档中的任何图像或文本文件,它将直接在网页中生成一个预览。该 代码在 GitHub 上可用,作为我们 mozhacks GitHub 存储库 的一部分。

注意:目前此演示仅在 Firefox AuroraFirefox Nightly 中有效。

我还整理了一个 YouTube 上的演示视频

(如果您已选择在 YouTube 上使用 HTML5 视频,您将看到它,否则它将回退到 Flash)

反馈

我希望您觉得这很有趣,并且是 Web 作为平台向前迈出的又一步!请在评论区告诉我们您的想法。

此外,您还可以参加一个关于 ArchiveAPI 异步特性的民意调查/问卷调查。它在 关于潜在 ArchiveReader API 的反馈 中可用。

关于 Robert Nyman [荣誉编辑]

Mozilla Hacks 的技术布道者和编辑。在 HTML5、JavaScript 和开放 Web 方面发表演讲和博客文章。Robert 是 HTML5 和开放 Web 的坚定支持者,自 1999 年以来一直在从事 Web 前端开发工作 - 在瑞典和纽约市。他还定期在 http://robertnyman.com 上发表博客文章,喜欢旅行和结识新朋友。

更多来自 Robert Nyman [荣誉编辑] 的文章...


16 条评论

  1. Andrei

    它现在可以处理哪些类型的文件?zip、tar、bz2?

    2012 年 10 月 1 日 下午 12:33

    1. Robert Nyman

      您提到的通用类型应该都受支持。此外,ZIP 中还有 ZIP。请尝试一下,如果您遇到问题,请告诉我们!

      2012 年 10 月 1 日 下午 1:22

  2. Beben Koben

    嗯...
    适用于 Aurora 和 Nightly
    明白了 明白了
    等待 Firefox :D

    2012 年 10 月 1 日 下午 1:34

    1. Robert Nyman

      没关系。:-) 如果您想尝试,您可以选择。

      2012 年 10 月 2 日 上午 2:26

  3. 开发者

    我认为 HTML 5 实现比引入 ArchiveAPI 或 Gamepad API 等新功能更重要。大多数交互式元素(命令、菜单、详细信息)和表单控件(范围、数字、日期和时间)尚未实现。封装方法(例如 JavaScript 模块、Web Components、作用域样式)不可用。构建应用程序布局很复杂,因为新的 CSS flexbox 和 CSS grid 尚未实现。因此,我认为基于 Web 的应用程序的基础很薄弱。这意味着使用 HTML 5 编写 Web 应用程序仍然比基于插件的替代方案更耗时、更困难。

    2012 年 10 月 1 日 下午 5:38

    1. Robert Nyman

      这假设一件事是牺牲另一件事来实现的,但这并不一定是真的。Web 浏览器由许多不同的部分组成,它们共同协作以提供最佳体验。

      例如,在表单控件和 CSS 布局选项方面,规范处于不同的状态,很多事情仍在讨论中。

      这是并行工作,而不是竞争。

      2012 年 10 月 2 日 上午 2:28

  4. Calvin Spealman (@ironfroggy)

    我对这个 API 并不满意。它似乎应该更接近甚至实际上集成到 Filesystem API 中,而不是像现在这样分开。

    2012 年 10 月 1 日 下午 7:09

    1. Robert Nyman

      我认为它与 FileSystem API 相当类似,但我们始终愿意接受改进。请在博客文章中提供的反馈链接中提交您的想法。

      2012 年 10 月 2 日 上午 2:29

  5. Forrest O.

    我们会看到 ArchiveWriter API 吗?

    2012 年 10 月 2 日 上午 6:36

    1. Robert Nyman

      目前,我不知道有什么计划。不过,这似乎是合理的。

      2012 年 10 月 2 日 上午 6:39

  6. Ken Saunders

    嘿,这太棒了!

    你们应该把它做成一个附加组件,以潜在地增加测试它的用户数量。我很想看到 Hacks 创作出像 Mozilla Labs 一样的附加组件。

    我用几个包含壁纸、各种图像和图形以及一些 Firefox 附加组件的 ZIP 文件进行了尝试。

    也许说它显示(某些)文件内容会比称之为预览更合适,因为它显示所有可以保存的图像的完整尺寸,文本文件也可以复制。

    我已经看到了一个很棒的用途。
    我以及数百万其他壁纸和图形设计师、素材提供商等,会以多种尺寸提供我们的艺术作品,以适应不同的显示器分辨率以及其他原因,这将是一个不错的功能,因为用户不必下载整个 ZIP 文件,打开它,选择他们想要的一张,然后删除其余部分。在壁纸的情况下,他们可以使用它立即选择一张图像并将其设置为桌面壁纸(尽管由于某种原因,图像质量会略有下降)。对于其他图形,也是同样的想法。选择一两张保存,然后忘记其他部分。

    也许像 deviantART.com 这样的网站可以实现这一点。

    最终会支持 Windows 图标 (.ico) 文件吗?

    2012 年 10 月 2 日 下午 6:44

    1. Robert Nyman

      很高兴您喜欢它!

      一般来说,安装附加组件是 API 的一种完全不同的方法,因为我们需要了解该功能在 Firefox 中的实际运行情况,因此人们在 Firefox Aurora 或 Firefox Nightly 中进行测试要好得多(也希望更容易)。

      很高兴听到您建议的用例,我同意!

      ZIP 文件支持 Windows 图标,但在预览方面,它取决于您可以在网页中本地显示的内容。

      2012 年 10 月 3 日 上午 3:56

  7. Jason

    等等。为什么把它纳入标准?
    这没有提供任何无法用标准的、编写良好的 JavaScript 完成的功能(看看 Mozilla 自己的 pdf.js 和其他许多项目)。

    如果我们开始提供这样的“库”,那么那里存在的每一个文件格式都需要它自己的“标准化”原生版本。这将是一场噩梦。

    2012 年 10 月 4 日 下午 7:17

    1. Robert Nyman

      目前,没有其他支持从任何类型的存档文件中读取文件信息。这只是提供这种可能性的一个额外 API,而不是针对每种文件格式,而是针对特定类型的格式。

      2012 年 10 月 5 日 上午 2:18

      1. Jason

        > 这只是提供这种可能性的一个额外 API,而不是针对每种文件格式,而是针对特定类型的格式。

        我认为,这正是问题所在。
        目前,没有任何规范指定在任何地方读取特定类型的文件。
        如果突然出现一个新的规范或 API 来读取特定类型的文件,世界其他地方将开始想要越来越多的文件类型,然后人们在压力下将被迫为这些文件类型添加原生支持,并且将有数百万个不同的阅读器为数百万个不同的文件类型污染浏览器的命名空间。

        > 目前,没有其他支持从任何类型的存档文件中读取文件信息。

        我认为没有“原生”支持。用纯 JavaScript 制作解析器是完全可能的,而且效果相当不错。

        * http://mozilla.github.com/pdf.js/
        * https://github.com/imaya/zlib.js
        * 嗯,快速搜索就能找到更多。

        2012年10月6日 上午7:58

        1. Robert Nyman

          嗯,通过多个 文件 API 规范,有不同的方法可以读取文件内容,包括:

          – 文件列表
          – Blob
          – 文件
          – 文件读取器
          – URI 方案

          因此,当涉及到 ArchiveAPI 时,它可以是 FileAPI 家族的一部分,或者被整合到现有的 API 中。当它被建议为标准时,将讨论不同的选择。

          我认为像 pdf.js 这样的东西很棒,但不是真正意义上的相同。它们更像是完整的解决问题的产品,需要维护和后续工作。

          我更希望看到这些标准化的 API(现在或即将标准化)作为此类产品的补充,并让 Web 开发人员确信它们可以作为 Web 浏览器中内置的功能依赖。

          2012年10月8日 上午2:56

本文评论已关闭。