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
|
---
title: File and Directory Entries API
slug: Web/API/File_and_Directory_Entries_API
tags:
- API
- File System API
- File and Directory Entries API
- Files
- NeedsTranslation
- Non-standard
- Overview
- Reference
- TopicStub
translation_of: Web/API/File_and_Directory_Entries_API
---
<p>{{DefaultAPISidebar("File System API")}}</p>
<p>{{Non-standard_Header}}</p>
<p>API доступа к файлам и директориям имитирует локальную файловую систему, в которой веб-приложения могут перемещаться и получать доступ к файлам. Вы можете разрабатывать приложения, которые читают, записывают и создают файлы и/или каталоги в виртуальной изолированной файловой системе. </p>
<div class="note">
<p>Поскольку это нестандартный API, спецификация которого в настоящее время не входит в стандарт, важно помнить, что не все браузеры реализуют его, а те, которые поддерживают, могут реализовывать только небольшие его части. Дополнительные сведения в разделе {{anch("Browser compatibility")}} </p>
</div>
<p>Существуют два очень похожих API в зависимости от того, хотите ли вы асинхронного или синхронного поведения. Синхронный API предназначен для использования внутри {{domxref("Worker")}} и будет возвращать желаемые значения. Асинхронный API не будет блокировать выполнение кода, а API не будет возвращать значения; вместо этого вам нужно будет предоставить колбэк-функцию для обработки одного или нескольких ответов.</p>
<div class="warning">
<p>Firefox реализация File System API очень ограничена: не поддерживается создание файлов. Доступ к файлам осуществляется только через {{HTMLElement("input")}} элемент (см. так же {{domxref("HTMLInputElement")}}) или путём перетаскивания файла/папки (<a href="/en-US/docs/Web/API/HTML_Drag_and_Drop_API">drag and drop</a>). Firefox также не реализует синхронный API. Внимательно проверьте совместимость браузера для любой части API, которую вы используете. ( см. <a href="/en-US/docs/Web/API/File_and_Directory_Entries_API/Firefox_support">Поддержка File System API в Firefox</a>)</p>
</div>
<h2 id="Получение_доступа_к_файловой_системе">Получение доступа к файловой системе</h2>
<p>Есть два способа получить доступ к файловой системе, определённым в текущем проекте спецификации:</p>
<ul>
<li>При обработке события {{event("drop")}} вы можете вызвать {{domxref("DataTransferItem.webkitGetAsEntry()")}} что бы получить {{domxref("FileSystemEntry")}} для "брошенного" элемента. Если результат не <code>null</code>, то это брошенный файл или каталог, и вы можете использовать вызовы файловой системы для работы с ним.</li>
<li>Свойство {{domxref("HTMLInputElement.webkitEntries")}} позволяет получить объект {{domxref("FileSystemFileEntry")}} для выбранного файла, но только если они перетаскиваются в <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1326031" rel="noopener">средство выбора</a> файлов ( <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1326031" rel="noopener">баг 1326031</a> ). Если {{domxref("HTMLInputElement.webkitdirectory")}} является <code>true</code>, то {{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">File System API</a>.</dd>
<dt>{{domxref("FileError")}}</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")}}</dt>
<dd>Представляет ошибку, которая возникает при вызовах синхронной файловой системы.</dd>
</dl>
<p>Также есть две глобальные функции (которые в настоящее время не являются частью спецификации и реализуются только в Google Chrome). Они доступны в объекте {{domxref("Worker")}} и реализованы в{{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">Specification</th>
<th scope="col">Status</th>
<th scope="col">Comment</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>
<p>{{Compat}}</p>
<p>{{Compat("api.FileSystemSync", 0)}}</p>
<h2 id="Смотрите_также">Смотрите также</h2>
<ul>
<li><a href="/en-US/docs/Web/API/File_and_Directory_Entries_API/Introduction">Introduction to the File and Directory Entries API</a></li>
<li><a href="/en-US/docs/Web/API/File_and_Directory_Entries_API/Firefox_support">File and Directory Entries API support in Firefox</a></li>
</ul>
|