aboutsummaryrefslogtreecommitdiff
path: root/files/zh-cn/web/api/file_and_directory_entries_api/index.html
blob: 30046632a62f7fb1b49573ba598984032ae9cfc9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
---
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>