【问题标题】:msSaveBlob arbitrary path / where does it save?msSaveBlob 任意路径/它保存在哪里?
【发布时间】:2014-04-09 18:27:56
【问题描述】:

我被要求用 JS 做一些不自然的事情。

基本上,我需要以允许用户在本地文件系统中修改它们的方式永久保存文件。

我看到 HTML5 指定了一个似乎部分适合此的 FileWriter API。不幸的是,用户有 IE -- http://caniuse.com/filesystem -- 所以最接近的东西似乎是 msSaveBlob。

msSaveBlob 是否支持任意文件路径?理想情况下,我想将这些文件保存在用户“文档”文件夹中。如果不是,这个沙盒文件系统是如何工作的?它在哪里?它是否保留了原始文件的特征(或者 BLOB 是否意味着某种类型的块存储)?

注意 - 我知道有一个带有常规链接的“另存为”选项,但我需要知道用户最终保存文件的位置。

或者,您是否知道一种更好的保存方法,可以让我使用任意路径?我不反对 Flash 或 Silverlight 解决方案,只要它带有 JS 包装器即可。

【问题讨论】:

    标签: javascript internet-explorer


    【解决方案1】:

    FileSystem API 目前仅受 Google Chrome 和 Opera 支持。此 API 可用于创建、读取、写入和删除文件和目录,但仅限于文件系统的隔离部分。我展示了一个详细的示例here(请参阅答案的第二部分)。

    关于navigator.msSaveBlobhere是MSDN上的一个例子。此功能显示带有“保存”和“另存为”按钮的通知栏。通过单击后者,用户可以选择任意位置来保存文件。

    如果您使用navigator.msSaveOrOpenBlob,那么用户还将获得一个“打开”按钮。如果用户单击此文件,则将打开该文件。在我上面提到的 MSDN 示例中,从 JavaScript 字符串创建了一个文本文件,该文件将在记事本中打开。

    使服务器上的文件可保存到客户端计算机上任意位置的常用方法是create a link。用户可以单击链接,或从弹出菜单中选择“将链接另存为...”。如果要保存在 JavaScript 中创建的 blob,则可以尝试使用 <a> 标记的 download 属性,我展示了一个示例 here。此技术适用于 IE10+。

    【讨论】:

    • "此函数显示通知栏,带有“保存”和“另存为”按钮。通过单击后者,用户可以选择任意位置来保存文件。" - 我可以在 navigator.msSaveBlob 中指定一个回调来获取用户选择的路径吗?如果我能知道用户最终保存文件的位置,这一切看起来都很完美。我知道如何创建链接,但它没有告诉我文件下载的位置。
    • 我不认为你可以。没有回调参数,“只要显示通知栏就返回true”(MSDN),表示该函数不跟随通知栏显示后的事件。
    • 好的,谢谢。这对我来说并不比常规链接有用。
    • 我同意。无论如何,如果您的用户必须使用 IE,那么您应该考虑使用 Silverlight 或 XBAP。完全受信任的 XBAP 可以真正在客户端计算机上做任何事情。这些是出色的解决方案,尤其适用于公司内部网中使用的 Web 应用程序。
    • 该应用程序的范围比这一个用例/用户组更大。它必须是 HTML5/JS,而不是某些 WPF 类型的应用程序。你知道我是否可以编写某种类型的 Silverlight/XBAP 插件,以便与现有的 JS 代码库进行交互?我不熟悉这些平台,因此任何有助于我进一步研究的文章都会有所帮助。
    猜你喜欢
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 2014-07-15
    • 2018-11-30
    • 1970-01-01
    • 1970-01-01
    • 2011-09-05
    相关资源
    最近更新 更多