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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
|
---
title: LocalFileSystem
slug: Web/API/LocalFileSystem
translation_of: Web/API/LocalFileSystem
---
<div>{{APIRef("File System API")}}{{non-standard_header()}}</div>
<p><a href="https://developer.mozilla.org/en/DOM/File_API/File_System_API" title="en/DOM/File_API/File_System_APIB">File System API</a> の <code>LocalFileSystem</code> インターフェイスを使用すると、サンドボックスファイルシステムにアクセスできます。 これらのメソッドは、<a href="ja/docs/Web/API/Window">window</a> オブジェクトと <a href="/ja/docs/Web/API/Worker">worker</a> オブジェクトによって実装されます。</p>
<h2 id="基本のコンセプト">基本のコンセプト</h2>
<p>このセクションには、メソッドの主要な概念がいくつか含まれています。</p>
<h3 id="新しいストレージの作成">新しいストレージの作成</h3>
<p><code>window.requestFileSystem()</code> を呼び出すことで、サンドボックス化されたファイルシステムへのアクセスを要求します。コールバックに成功した場合の引数は <code><a href="/ja/docs/Web/API/FileSystem">FileSystem</a></code> オブジェクトで、ファイルシステムの名前とルートの 2 つのプロパティを持ちます。</p>
<p>一時的なものと永続的なものの 2 つのファイルシステムを作成したい場合は、このメソッドを複数回呼び出すことができます。(ストレージの種類についての詳細は、<a href="/ja/docs/Web/API/File_and_Directory_Entries_API/Introduction#Restrictions">基本コンセプト</a>の記事を参照してください)。ほとんどの場合、ファイルシステムを作成する必要があるのは 1 つだけですが、いくつかのケースでは 2 つ目のファイルシステムを作成した方が便利な場合もあります。例えば、メールアプリを作成する場合、パフォーマンスを高速化するためにアセット (画像や添付ファイルなど) をキャッシュするための一時的なストレージを作成し、一方で、オフラインで作成されたメールの下書きなど、クラウドにバックアップする前に失われてはならない固有のデータのために永続的なストレージを作成することができます。</p>
<h3 id="永続的なストレージの使用">永続的なストレージの使用</h3>
<p><code>requestFileSystem()</code> メソッドでは、<a href="/ja/docs/Web/API/File_and_Directory_Entries_API/Introduction#The_File_System_API_can_use_different_storage_types"><code>PERSISTENT</code> または <code>TEMPORARY</code> ストレージ</a>を要求することができます。永続的ストレージとは、アプリまたはユーザーが削除しない限り、ブラウザに保存されるストレージですが、使用するにはユーザーの許可が必要です。対照的に、一時的なストレージは、ユーザーの許可なしに自動的に許可されますが、ブラウザによっていつでも削除することができます。</p>
<p>ファイルシステム API で <code>PERSISTENT</code> ストレージを使用するには、Chrome は requestQuota API を公開しています。そのため、ストレージをリクエストするには、次のようなことを行う必要があります。</p>
<pre class="notranslate">var requestedBytes = 1024*1024*10; // 10MB
navigator.webkitPersistentStorage.requestQuota (
requestedBytes, function(grantedBytes) {
window.requestFileSystem(PERSISTENT, grantedBytes, onInitFs, errorHandler);
}, function(e) { console.log('Error', e); }
);
</pre>
<p>アプリが永続的ストレージを使用する前に、ユーザーがアプリにデータをローカルに保存する許可を与える必要があります。ユーザーが許可したら、<code>requestQuota()</code> を再度呼び出す必要はありません。それ以降の呼び出しは noop です。</p>
<p>もう 1 つの API、クォータ管理 API では、<code>window.webkitPersistentStorage.queryUsageAndQuota()</code> を使用してオリジンの現在のクォータの使用量と割り当てを問い合わせることができます。詳細については、この <a href="http://stackoverflow.com/a/29662985/89484">StackOverflow のアンサー</a>を参照してください。(API の古いバージョンについては、<a href="https://developer.chrome.com/apps/offline_storage?csw=1">HTML5 オフライン ストレージの管理</a>で説明しています)。</p>
<h3 id="単一のオリジン内での作業">単一のオリジン内での作業</h3>
<p>ファイルシステムは、単一のオリジンにサンドボックス化されています。これは、アプリが他のアプリのファイルを読み取ったり、書き込んだりすることができないことを意味します。アプリは、ユーザーのハード ドライブ上の任意のフォルダ(マイ ピクチャ、マイ ドキュメントなど)内のファイルにアクセスすることもできません。制限の詳細については、<a href="/ja/docs/Web/API/File_and_Directory_Entries_API/Introduction#Restrictions">基本コンセプト</a>の記事を参照してください。</p>
<h3 id="例">例</h3>
<p>以下は、ファイルシステムのストレージを要求する方法を示すコードスニペットです。</p>
<pre class="brush: js notranslate">//Taking care of the browser-specific prefix
window.requestFileSystem = window.requestFileSystem || window.webkitRequestFileSystem;
// The first parameter defines the type of storage: persistent or temporary
// Next, set the size of space needed (in bytes)
// initFs is the success callback
// And the last one is the error callback
// for denial of access and other errors.
window.requestFileSystem(window.PERSISTENT, 1024*1024,onInitFs,errorHandler);
</pre>
<h2 id="メソッド概要">メソッド概要</h2>
<table class="standard-table">
<tbody>
<tr>
<td><code>void <a href="#requestFileSystem" title="#requestFileSystem">requestFileSystem</a> (in unsigned short <em>type</em>, in unsigned long long <em>size</em>, in FileSystemCallback <em>successCallback</em>, in optional ErrorCallback <em>errorCallback</em>); </code></td>
</tr>
<tr>
<td><code>void <a href="/#resolveLocalFileSystemURL" title="#resolveLocalFileSystemURL">resolveLocalFileSystemURL</a> (in DOMString <em>url</em>, in EntryCallback <em>successCallback</em>, in optional ErrorCallback <em>errorCallback</em>);</code></td>
</tr>
</tbody>
</table>
<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><a name="const_temporary"><code>TEMPORARY</code></a></td>
<td><code>0</code></td>
<td>
<p>一時的なストレージで、ブラウザの裁量で削除することができます。</p>
</td>
</tr>
<tr>
<td><a name="const_persistent"><code>PERSISTENT</code></a></td>
<td><code>1</code></td>
<td>ユーザーまたはアプリがそれを消去しない限り、ブラウザに保存されているストレージ。アプリがこのタイプのストレージを使用するには、その前にユーザーに許可を与える必要があります。</td>
</tr>
</tbody>
</table>
<h2 id="メソッド">メソッド</h2>
<h3 id="requestFileSystem" name="requestFileSystem">requestFileSystem()</h3>
<p>データが保存されるべきファイル システムを要求します。サンドボックス化されたファイルシステムにアクセスするには、このグローバルメソッド <code>window.requestFileSystem()</code> を使用して <code>LocalFileSystem</code> オブジェクトを要求します。</p>
<pre class="notranslate">void requestFileSystem(
in unsigned short type,
in unsigned long long size,
in FileSystemCallback successCallback,
in ErrorCallback errorCallback
);</pre>
<h5 id="パラメータ">パラメータ</h5>
<dl>
<dt>type</dt>
<dd>ファイルシステムのストレージタイプ。値は <code><a href="#const_temporary">TEMPORARY</a></code> または <code><a href="#const_persistent">PERSISTENT</a></code> のいずれかです。</dd>
<dt>size</dt>
<dd>アプリに必要なストレージ容量 (バイト単位)。</dd>
<dt>successCallback</dt>
<dd>ブラウザがファイルシステムを提供したときに呼び出される成功コールバック。その引数は、2つのプロパティを持つ <code><a href="/ja/docs/Web/API/FileSystem">FileSystem</a></code> オブジェクトです。
<ul>
<li>name - ブラウザがファイルシステムに割り当てる一意の名前</li>
<li>root - ファイルシステムのルートを表す読み取り専用の <code>DirectoryEntry</code> オブジェクト</li>
</ul>
</dd>
<dt>opt_errorCallback</dt>
<dd>エラーが発生したとき、またはファイルシステムの取得要求が拒否されたときに呼び出されるエラーコールバックです。引数は <code>FileError</code> オブジェクトです。</dd>
</dl>
<h5 id="戻り値">戻り値</h5>
<dl>
<dt><code>void</code></dt>
</dl>
<h5 id="例外">例外</h5>
<p>このメソッドは、以下のコードで <a href="/ja/docs/Web/API/FileError">FileError</a> が発生する可能性があります。</p>
<table class="standard-table">
<thead>
<tr>
<th scope="col">例外</th>
<th scope="col">説明</th>
</tr>
<tr>
<td><code>SECURITY_ERROR</code></td>
<td>このアプリケーションは、ファイルシステムインターフェイスにアクセスする権限を持っていません。例えば、<code>file://</code> からは実行できません。詳細については、<a href="/ja/docs/Web/API/File_and_Directory_Entries_API/Introduction#You_cannot_run_your_app_from_file:.2F.2F">基本的な考え方の記事</a>を参照してください。</td>
</tr>
</thead>
</table>
<h3 id="resolveLocalFileSystemURL" name="resolveLocalFileSystemURL()">resolveLocalFileSystemURL()</h3>
<p>ローカル URL でファイルやディレクトリのエントリを検索できます。</p>
<pre class="notranslate">void resolveLocalFileSystemURL(
in DOMString url,
in EntryCallback successCallback,
in optional ErrorCallback errorCallback
);
</pre>
<h5 id="パラメータ_2">パラメータ</h5>
<dl>
<dt>url</dt>
<dd>ファイルシステム内のローカルファイルの URL。</dd>
<dt>successCallback</dt>
<dd>ブラウザが指定した URL のファイルまたはディレクトリを提供したときに呼び出される success コールバック。</dd>
<dt>errorCallback</dt>
<dd>エラーが発生したとき、またはエントリオブジェクトの取得要求が拒否されたときに呼び出される error コールバック。</dd>
</dl>
<h5 id="戻り値_2">戻り値</h5>
<dl>
<dt><code>void</code></dt>
</dl>
<h5 id="例外_2">例外</h5>
<p>このメソッドは、以下のコードで <a href="/ja/docs/Web/API/FileError">FileError</a> が発生する可能性があります。</p>
<table class="standard-table">
<thead>
<tr>
<th scope="col">例外</th>
<th scope="col">説明</th>
</tr>
<tr>
<td><code>ENCODING_ERR</code></td>
<td>URL の構文が無効でした。</td>
</tr>
<tr>
<td><code>NOT_FOUND_ERR</code></td>
<td>URL は構造的には正しいのですが、存在しないリソースを参照しています。</td>
</tr>
</thead>
<tbody>
<tr>
<td><code>SECURITY_ERR</code></td>
<td>このアプリケーションは、ファイルシステムインターフェイスにアクセスする権限を持っていません。</td>
</tr>
</tbody>
</table>
<h2 id="Browser_Compatibility" name="Browser_Compatibility">ブラウザの互換性</h2>
<div class="hidden">このページの互換表は構造化データから生成されます。データに貢献したい場合は <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> をチェックし、プルリクエストを送信してください。</div>
<p>{{Compat("api.LocalFileSystem")}}</p>
<h2 id="あわせて参照">あわせて参照</h2>
<p>仕様書:{{ spec("http://dev.w3.org/2009/dap/file-system/pub/FileSystem/", "File API: Directories and System Specification", "WD") }}</p>
<p>リファレンス: <a href="/en/DOM/File_API/File_System_API" title="en/DOM/File_API/File_System_API">File System API</a></p>
<p>イントロダクション: <a href="/en/DOM/File_APIs/Filesystem/Basic_Concepts_About_the_Filesystem_API" title="en/DOM/File_APIs/Filesystem/Basic_Concepts_About_the_Filesystem_API">Basic Concepts About the File System API</a></p>
|