【スポンサーリンク】

[phina.js] JavaScript でユーザー端末のファイル入出力をするには

[phina.js] JavaScript でユーザー端末のファイル入出力をするには

JavaScriptでは、ウェブ上のデータと違ってユーザー端末内のファイルには、直接アクセスできない仕組みになっています。
これは、自分で作ったプログラムを検証する場合でもそうです。

そのため、ローカル環境のファイルにアクセスするには、自前のウェブサーバでアクセス可能にするか、ブラウザから読み込み・保存する必要があります。

今回は、ブラウザからのファイル入出力を見てみます。

\記事が役に立ったらシェアしてね/
【スポンサーリンク】

1. Blobオブジェクトのダウンロード

文字列をテキストファイルとして保存するなら、仮想的なリンクを作って、リンクのクリックイベントでダウンロードさせる方法があります。

const blob = new Blob(['あいうえお'],{type:"text/plain"});

const link = document.createElement('a');
link.href = URL.createObjectURL(blob);
link.download = 'ファイル名.txt';
link.click();

ダウンロード場所は、既定のダウンロードフォルダになります。

Blobオブジェクトのダウンロード
Blobオブジェクトのダウンロード

このコードは、phina.jsのシーン内でも動作しました。

2. window.showOpenFilePicker でファイル選択

ファイルの入力(つまり、ユーザーのファイルからのアップロード)では、ブラウザはファイル選択画面を表示して、ユーザーにファイルを選択させます。
逆にいうと、ユーザーが毎回 手動で選択したファイルしか読み込むことができません。

ファイルの入出力では、window.showOpenFilePicker を使います。
windowは、ブラウザのグローバル変数をまとめたオブジェクトです1

Window.showOpenFilePicker() メソッドでファイル選択ダイアログを表示します。戻り値の型は FileSystemFileHandle の Arrayです。配列になっているのは一度に複数のファイルを読み込む可能性があるためです。

【そのまま使えるサンプルコードあり】JavaScriptでローカルファイルの読み込み、書き出しを行う – Bon appetit! artworks

見本のコードはこちら。

keycode 32(スペースキー)でファイル選択画面を表示して、コンソールに読み込んだテキストを出力します。

      var fileSelect = async function(event) {
        const pickerOpts = {
          types: [{ description: 'Texts(.txt)', accept: {'text/*': ['.txt']} }],
          multiple: false,
        }
        if (event.keyCode==32) {
          let fileHandle;
          [fileHandle] = await window.showOpenFilePicker(pickerOpts);
          
          const file = await fileHandle.getFile();
          const fileContents = await file.text();

          console.log(fileContents);
          window.removeEventListener('keydown', fileSelect); 
        }
      };
      window.addEventListener('keydown', fileSelect); 
window.showOpenFilePicker でファイル選択

showOpenFilePickerは、セキュリティ制限のため、直前にユーザーによる操作イベントが必要です2
そのため、keydownイベントの中で実行しています。

コードから唐突にファイル選択画面を表示することはできません。

window.showOpenFilePicker でファイル選択

この方法もphina.jsから使えました。

こちらもどうぞ。

phina.jsで将棋盤ゲームのプログラミングした話 [JavaScript]
phina.jsで将棋盤ゲームのプログラミングした話 [JavaScript]
先日、スマホで操作できる将棋盤プログラムを作りました。 デザイン将棋盤 ↑ こちらから動かせます。 phina.jsライブラリ プログラミング言語は JavaScriptで、phina.jsというライブラリを利用しました。 公式サイト Home | phina.js せっかくなので、駒を自分でkeynoteでデザインしました。 Keynoteで駒をデザインした けっこう、図形の結合なんかを組み合わせるだけで、それっぽくできるんだね。 すぐにコードを動かせるのが魅力 言語にJa...
MRIやCTの画像ディスクをパソコンで見るには?【DICOMの閲覧】
MRIやCTの画像ディスクをパソコンで見るには?【DICOMの閲覧】
病院で画像診断のディスクをもらいました。パソコンに入れたところ、「このディスクに対して行う操作を選んでください」と表示されています。どうすればいいのでしょうか? Windows PCなら、同梱されている専用ビューワ「AOC Stackato」で画像データを閲覧できます。 CD-ROMの自動再生 「AOC_Stackato の起動」というのは、CD-ROM内の自動再生プログラムです。 プログラムの表示を見ると、「専用ビューワ(AOC Stackato)」か「Webブラウザ」で画...
久しぶりにMacでElectronを使えるようにした【node.jsでアプリ自作】
久しぶりにMacでElectronを使えるようにした【node.jsでアプリ自作】
Macで動く自作ツールをJavaScriptでプログラムするために、Electronを使っていました。 久しぶりにプログラムを修正しようとしたら、electronコマンドが通りません。 改めて環境を構築しました。 ポイント electronのインストールで「sudo npm install -g electron --unsafe-perm=true --allow-root」でオプションを付加しないとエラーになった Electronが見つからない Electronは、「HT...

(補足)

  1. ブラウザにおけるグローバル変数は windowオブジェクトのプロパティとしても操作できます。- 中級者になるために押さえておくべきJavaScriptの言語特性の1つ、「スコープ」とは?|CodeZine(コードジン)
  2. ユーザーによる一時的な有効化」が必要です。この機能が動作するには、ユーザーがページまたは UI 要素を操作する必要があります。 – Window.showOpenFilePicker() – Web API | MDN
QRコードを読み込むと、関連記事を確認できます。

[phina.js] JavaScript でユーザー端末のファイル入出力をするには
【スポンサーリンク】
タイトルとURLをコピーしました