---
title: File and Directory Entries API
slug: Web/API/File_and_Directory_Entries_API
tags:
  - API
  - File
  - Files
  - 参考
  - 文件
  - 非标准
translation_of: Web/API/File_and_Directory_Entries_API
---
<p>{{DefaultAPISidebar("File System API")}}{{Non-standard_header}}</p>

<p>文件与目录条目 API 模拟一个 web 应用可以导航和访问的本地文件系统。你在虚拟的沙箱文件系统中可以开发一个读、写、创建文件或者目录的应用。</p>

<div class="note">
<p>因为这是一个非标准 API,它的规范目前还没有在标准的轨道上,所以要记住,并不是所有的浏览器都实现了它,而且那些实现了的浏览器可能只实现了它的一小部分。有关详细信息,请查看<a href="#浏览器兼容性">浏览器兼容性</a>部分。</p>
</div>

<p>根据您希望的是异步行为还是同步行为,存在两个非常相似的 API。同步 API 可在 {{domxref("Worker")}} 中使用,并将返回所需的值。异步 API 不会阻塞和函数,API不会返回值;相反,您将需要提供一个回调函数,以便在响应到达时处理它。</p>

<div class="warning">
<p>Firefox 实现的文件与目录条目 API 非常有限;不支持创建文件。仅用于访问用户在 file {{HTMLElement("input")}} 元素中选择的文件(也请参阅 {{domxref("HTMLInputElement")}} 中选择的文件),或使用拖放将文件或目录提供给 Web 站点或应用程序时。Firefox 也没有实现同步 API。仔细检查您使用的 API 的任何部分的浏览器兼容性,并查看 Firefox 中文件与目录条目 API 支持的更多细节。</p>
</div>

<h2 id="访问文件系统">访问文件系统</h2>

<p>有两种方法可以访问当前规范草案中定义的文件系统:</p>

<ul>
 <li>当处理用于拖放的 {{event("drop")}} 事件时,您可以调用 {{domxref("DataTransferItem.webkitGetAsEntry()")}} 来为被删除的项获取{{domxref("FileSystemEntry")}}。如果结果不是 <code>null</code>,那么它就是一个被删除的文件或目录,您可以使用文件系统调用来处理它。</li>
 <li>属性允许您访问当前选定文件的 {{domxref("FileSystemFileEntry")}} 对象,但前提是将它们拖放到文件选择器({{bug(1326031)}})。如果{{domxref("htmlinputel.webkitdirectory")}}为真,则 {{HTMLElement("input")}} 元素是一个目录选择器,您将为每个选择的目录获得 {{domxref("FileSystemDirectoryEntry")}} 对象。</li>
</ul>

<h2 id="异步_API">异步 API</h2>

<p>大多数操作都应该使用异步API,以防止在主线程上使用文件系统访问时阻塞整个浏览器。它包括以下接口:</p>

<dl>
 <dt>{{domxref("FileSystem")}}</dt>
 <dd>表示文件系统。</dd>
 <dt>{{domxref("FileSystemEntry")}}</dt>
 <dd>表示文件系统中单个条目的基本接口。这是由表示文件或目录的其他接口实现的。</dd>
 <dt>{{domxref("FileSystemFileEntry")}}</dt>
 <dd>表示文件系统中的单个文件。</dd>
 <dt>{{domxref("FileSystemDirectoryEntry")}}</dt>
 <dd>表示文件系统中的单个目录。</dd>
 <dt>{{domxref("FileSystemDirectoryReader")}}</dt>
 <dd>该接口通过调用 {{domxref("FileSystemDirectoryEntry.createReader()")}} 创建,提供了允许读取目录内容的功能。</dd>
 <dt>{{domxref("FileSystemFlags")}}</dt>
 <dd>定义一组值,这些值用于在调用<a href="https://developer.mozilla.org/en-US/docs/Web/API/File_and_Directory_Entries_API">文件和目录API</a>中的某些方法时指定选项标志。</dd>
 <dt>{{DOMxRef("FileError")}} {{Obsolete_Inline}}</dt>
 <dd>表示由异步文件系统调用生成的错误。</dd>
</dl>

<p>还有两个全局函数(目前不属于规范的一部分,仅在 Google Chrome 中被实现)。它们在 {{domxref("Window")}} 对象上可用,并在{{domxref("LocalFileSystem")}}: <code>requestFileSystem()</code> 和 <code>resolveLocalFileSystemURL()</code> 中实现。</p>

<h2 id="同步API">同步API</h2>

<p>同步 API 应该只用于 {{domxref("Worker")}} 中;在执行完毕前,这些调用会阻塞运行,并且只会简单地返回结果,而不是使用回调。在主线程上使用它们会阻塞整个浏览器,这很不明智。否则,下面的接口将镜像来自异步 API 的接口。</p>

<dl>
 <dt>{{domxref("FileSystemSync")}}</dt>
 <dd>表示文件系统。</dd>
 <dt>{{domxref("FileSystemEntrySync")}}</dt>
 <dd>表示文件系统中单个条目的基本接口。这是由表示文件或目录的其他接口实现的。{{domxref("EntrySync")}}</dd>
 <dt>{{domxref("FileSystemFileEntrySync")}}</dt>
 <dd>表示文件系统中的单个文件。</dd>
 <dt>{{domxref("FileSystemDirectoryEntrySync")}}</dt>
 <dd>表示文件系统中的单个目录。</dd>
 <dt>{{domxref("FileSystemDirectoryReaderSync")}}</dt>
 <dd>该接口通过调用 {{domxref("FileSystemDirectoryEntrySync.createReader()")}} 创建,提供了允许读取目录内容的功能。</dd>
 <dt>{{DOMxRef("FileException")}} {{Obsolete_Inline}}</dt>
 <dd>Represents an error which is generated by synchronous file system calls.</dd>
</dl>

<p>还有两个全局函数(目前不属于规范的一部分,仅在 Google Chrome 中被实现)。在 {{domxref("LocalFileSystemSync")}}: <code>requestFileSystemSync()</code> 和 <code>resolveLocalFileSystemSyncURL()</code> 中实现。</p>

<h2 id="其他接口">其他接口</h2>

<dl>
 <dt>{{domxref("LocalFileSystem")}}</dt>
 <dd>使您能够访问沙盒文件系统。</dd>
 <dt>{{domxref("LocalFileSystemSync")}}</dt>
 <dt></dt>
 <dt>{{domxref("LockedFile")}}</dt>
 <dd>提供处理具有所有必要锁的给定文件的工具。</dd>
 <dt>{{domxref("Metadata")}}{{experimental_inline}}</dt>
</dl>

<h2 id="规范">规范</h2>

<table class="standard-table">
 <thead>
  <tr>
   <th scope="col">规范</th>
   <th scope="col">状态</th>
   <th scope="col">备注</th>
  </tr>
 </thead>
 <tbody>
  <tr>
   <td>{{SpecName('File System API')}}</td>
   <td>{{Spec2('File System API')}}</td>
   <td>Draft of proposed API</td>
  </tr>
 </tbody>
</table>

<p>此 API 没有正式的 W3C 或 WHATWG 规范。</p>

<h2 id="浏览器兼容性">浏览器兼容性</h2>

<h3 id="FileSystem"><code>FileSystem</code></h3>



<p>{{Compat("api.FileSystem")}}</p>

<h3 id="FileSystemSync_属性"><code>FileSystemSync</code> 属性</h3>

<p>{{Compat("api.FileSystemSync")}}</p>

<p>Firefox 50 中引入了对文件与目录条目 API 的部分支持。在使用各个接口和方法之前,一定要检查它们的兼容性表,确保它们得到支持。将 about:config 中的 <code>dom.webkitBlink.filesystem</code> 值设为 <code>false</code> 可禁用该 API。</p>

<h2 id="参见">参见</h2>

<ul>
 <li><a href="/en-US/docs/Web/API/File_and_Directory_Entries_API/Introduction">介绍文件与目录条目 API</a></li>
 <li><a href="/en-US/docs/Web/API/File_and_Directory_Entries_API/Firefox_support">Firefox 中支持的文件和目录 API 条目</a></li>
</ul>