【问题标题】:Getting the full path of a DirectoryEntry获取 DirectoryEntry 的完整路径
【发布时间】:2013-11-09 22:21:50
【问题描述】:

有谁知道如何在 Chrome 打包应用程序中获取 DirectoryEntry 对象的完整路径,而不需要任何波浪号或其他快捷方式?

我正在写Google Chrome Packaged App。我的应用程序有一个按钮,用户可以在其中使用chrome.fileSystem API 选择目录。当目录选择返回到我的应用程序时,它由DirectoryEntry 对象表示,该对象在File API 中定义。该对象在控制台中如下所示:

DirectoryEntry {
  filesystem: DOMFileSystem
  fullPath: "/to_read"
  isDirectory: true
  isFile: false
  name: "to_read"
  __proto__: DirectoryEntry
}

我使用的是Windows,目录的完整路径是

C:\Users\David\Desktop\to_read

我想要一个可以返回该路径或类似内容的函数。不幸的是,我找到的最接近的是chrome.fileSystem.getDisplayPath,但它返回以下内容:

~\Desktop\to_read

getDisplayPath 的返回值对我没有用,因为我想获取目录的全名(包括驱动器),以便将其与我拥有的其他一些完整目录路径进行比较。

我尝试在DirectoryEntry 上调用toURL(),它返回一个空字符串。

关于我的项目的一些信息:我想编写一个 iTunes 库同步器作为 Chrome 打包应用程序。 iTunes 库 XML 文件包含完整路径,例如 file://localhost/D:/David/Music/Bob/Bob%20Album/01%20Bob.mp3。用户将允许我的应用访问他的音乐文件夹,我希望能够判断他是否允许我访问正确的文件夹。

【问题讨论】:

  • 您是否考虑过使用<input type="file"... 代替?
  • 正如在下面的答案中指出的那样,mediaGalleries API 可能是您真正想要的。否则考虑提交feature request。我认为在平台中使用chrome.fileSystem.getFullPath 方法是合理的。 @ExpertSystem,文件输入在这里不起作用,因为它故意掩盖了完整路径。
  • @KenRockot:你说的“模糊”是什么意思?您不能使用<fileInputElem>.value 获取路径吗?
  • 不,因为value 的路径类似于C:\fakepath\foo.xml
  • 天啊 - 你是对的 - 我是盲人

标签: google-chrome-extension filepath google-chrome-app


【解决方案1】:

唯一可用的完整路径是由 getDisplayPath 返回的路径。

mediaGalleries API 可能更适合您的项目:http://developer.chrome.com/apps/mediaGalleries.html#iTunes

【讨论】:

    【解决方案2】:

    如果你有一个完整的路径path/to/the/file.mp3,并且你想用tis直接加载文件,你可以这样做,但解决方案并不完美。使用chrome.mediaGalleries API 询问用户将他的音乐保存在哪里(在您的情况下),然后您可以编写一个循环来检查其中一个路径存储库是否等于画廊。

    例如,如果您从 xml 文件中获得了一个文件 path/to/the/file.mp3,并且您的画廊列表看起来像 ["D", "to", "Videos"],则编写一个函数来检查文件路径的每个组件是否都是画廊。在这种情况下,您的代码将找到“to”,因此您可以启动使用 "the/file.mp3" 的第二个函数。

    第二个函数必须使用给定的路径并查找库是否包含正确的文件夹,最后是正确的文件(使用此example by Google)。如果您尝试使用图库to 查找"the/file.mp3",您的循环必须找到一个名为"the" 的目录,然后是"file.mp3"(编写一个递归函数),如果找到文件打开它,否则来如果您还没有检查所有画廊或所有路径的组件,请返回第一个函数。

    【讨论】:

    • +1 表示持续努力,但我认为“检查文件路径的每个组件是否都是画廊”没有一个好方法?仅仅因为有一个名为“to”的画廊和一个名为“to”的文件夹并不意味着它们是同一个文件夹。我在 chromium-apps Google Group 上问过,有人说我应该在 crbug.com 上提出功能请求,所以我很快就会这样做。
    【解决方案3】:

    这目前 (2014-01-10) 不是 Chrome 的功能,但我已经提出了建议,他们正在努力:

    https://code.google.com/p/chromium/issues/detail?id=322952

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-16
      • 2014-12-14
      • 2011-12-11
      • 2014-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多