FileSystemHandle

Baseline 2023 *
Newly available

Since March 2023, this feature works across the latest devices and browser versions. This feature might not work in older devices or browsers.

* Some parts of this feature may have varying levels of support.

安全なコンテキスト用: この機能は一部またはすべての対応しているブラウザーにおいて、安全なコンテキスト (HTTPS) でのみ利用できます。

File System Access APIFileSystemHandle インターフェイスは、ファイルまたはディレクトリーのエントリーを表すオブジェクトです。複数のハンドルが同じエントリーを表す可能性もあります。FileSystemHandle を直接扱う場面はほとんどなく、子インターフェイスの FileSystemFileHandleFileSystemDirectoryHandle を扱うでしょう。

FileSystemHandle がもととなるインターフェイス

以下が、FileSystemHandle インターフェイスがもととなっているインターフェイスの一覧です。

FileSystemFileHandle

ファイルエントリーのハンドルを表します。

FileSystemDirectoryHandle

ディレクトリーエントリーへのハンドルを提供します。

インスタンスプロパティ

kind 読取専用

エントリーの種類を返します。'file' (対応するエントリーがファイルのとき) または 'directory' です。

name 読取専用

対応するエントリーの名前を返します。

インスタンスメソッド

isSameEntry()

2 個のハンドルを比較し、対応するエントリー (ファイルまたはディレクトリー) が一致するかを調べます。

queryPermission() Experimental

現在のハンドルの現在の許可の状態を取得します。

remove() Experimental 非標準

下層のファイルシステムからハンドルが表すエントリーを除去することを要求します。

requestPermission() Experimental

ファイルハンドルについて、読み取りまたは読み書きの許可を要求します。

種類を調べる

以下のコードでは、ユーザーにファイルピッカーでファイルを選択させ、返されたハンドルがファイルなのかディレクトリーなのかを調べます。

js
// ファイルハンドルへの参照を保存する
let fileHandle;

async function getFile() {
  // ファイルピッカーを開く
  [fileHandle] = await window.showOpenFilePicker();

  if (fileHandle.kind === "file") {
    // ファイルの場合のコードを実行する
  } else if (fileHandle.kind === "directory") {
    // ディレクトリーの場合のコードを実行する
  }
}

許可を確認 / 要求する

以下の非同期関数は、ユーザーがファイルハンドルに読み取りまたは読み書きの許可を与えている場合 true を返します。許可が与えられていない場合、許可を要求します。

js
// fileHandle は FileSystemFileHandle
// withWrite は書き込みなら true に設定される boolean

async function verifyPermission(fileHandle, withWrite) {
  const opts = {};
  if (withWrite) {
    opts.mode = "readwrite";
  }

  // 既に許可が得られているかを確認し、許可が得られていれば true を返す
  if ((await fileHandle.queryPermission(opts)) === "granted") {
    return true;
  }

  // ファイル操作の許可を要求し、ユーザーが許可すれば true を返す
  if ((await fileHandle.requestPermission(opts)) === "granted") {
    return true;
  }

  // ユーザーが許可しなかったので、false を返す
  return false;
}

エントリーを比較する

以下の関数は、1 個のエントリーをエントリーの配列と比較し、一致するエントリーをすべて取り除いた新しい配列を返します。

js
function removeMatches(fileEntry, entriesArr) {
  const newArr = entriesArr.filter((entry) => !fileEntry.isSameEntry(entry));

  return newArr;
}

仕様書

Specification
File System
# api-filesystemhandle

ブラウザーの互換性

Report problems with this compatibility data on GitHub
desktopmobile
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
FileSystemHandle
isSameEntry
kind
move
Non-standard
name
queryPermission
Experimental
remove
ExperimentalNon-standard
requestPermission
Experimental

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support
No support
No support
Experimental. Expect behavior to change in the future.
Non-standard. Check cross-browser support before using.

関連情報