jsはFileReaderを使用してローカルファイルまたはBLOBを読み取ります

jsはFileReaderを使用してローカルファイルまたはBLOBを読み取ります

FileReaderはローカルファイルまたはBLOBを読み取ります

FileReader オブジェクトは、ユーザーのコンピューターに保存されているファイルの内容を非同期で読み取る機能を提供します。読み取るファイルまたはデータを指定するには、File オブジェクトまたは Blob オブジェクトを使用します。FileReader インターフェイスは、ファイルを読み取るためのメソッドと、読み取り結果を含むイベント モデルを提供します。

1. FileReaderの使用

注: 古いブラウザとの互換性を確保する必要がある場合は、FileReader オブジェクトが存在するかどうかを確認する必要があります。

if (window.FileReader) {
 リーダーを新しいFileReader()にします。
} それ以外 {
 console.log('お使いのブラウザはファイルの読み取りをサポートしていません');
}

2. FileReader メソッド

方法効果パラメータ戻り値
アボート()読み取り操作を中止するなしなし
配列バッファとして読み込む()ファイルとBlobのコンテンツを読み取るファイル/ブロブ結果プロパティはArrayBufferデータオブジェクトのファイルの内容を返します。
readAsBinaryString()[W3 で非推奨]ファイルとBlobのコンテンツを読み取るファイル/ブロブ結果プロパティは元のバイナリデータのファイル内容を返します。
データURLとして読み込み()ファイルとBlobのコンテンツを読み取るファイル/ブロブ

結果属性は、データ:URLのBase64文字列形式でファイルの内容を返します。

テキストとして読み込む()ファイルとBlobのコンテンツを読み取るファイル/ブロブ結果プロパティはファイルの内容を文字列として返します

3. FileReaderプロパティ

  • FileReader.error (読み取り専用): ファイルの読み取り中に発生したエラーを示す例外
  • FileReader.readyState (読み取り専用): FileReader の状態を表す数値
価値ステータス名説明する
0空のデータが読み込まれていません
1読み込み中データの読み込み
2終わり

データの読み込みが完了しました

  • FileReader.result (読み取り専用): ファイルの内容が読み取られます。このプロパティは、データが読み取られた後にのみ有効です。ファイルの内容の形式は、読み取り方法によって決まります。

4. FileReader イベント

  • FileReader.onabort : 読み取りが中止されたときにこのイベントがトリガーされます。
  • FileReader.onerror : 読み取り中にエラーが発生したときにこのイベントがトリガーされます。
  • FileReader.onload : 読み取りが完了するとこのイベントがトリガーされます。
  • FileReader.onloadstart : このイベントは、読み取り操作が開始されたときにトリガーされます。
  • FileReader.onloadend : このイベントは、読み取りが完了したときにトリガーされます (失敗した場合と成功した場合の両方でトリガーされます)。
  • FileReader.onprogress : このイベントは読み取り中にトリガーされます。

知らせ:

1. セキュリティ上の理由により、FileReader は入力によって渡されたファイルまたは Ajax 読み取りサーバーによって返されたファイルを読み取りますが、指定されたパスにあるファイルを読み取ることはできません。

2. FileReader は webworker で使用できます。

<!DOCTYPE html>
<html class="no-js">
	<ヘッド>
		<メタ文字セット="utf-8" />
		<meta http-equiv="X-UA-compatible" content="IE=edge" />
		<タイトル></タイトル>
		<meta name="説明" コンテンツ="" />
		<meta name="viewport" content="width=デバイス幅、初期スケール=1" />
		<link rel="スタイルシート" href="" />
	</head>
 
	<本文>
		<input type="file" id="myFile" />
		<script type="text/javascript">
			if (window.FileReader) {
				var リーダー = 新しい FileReader();
			} それ以外 {
				console.log('お使いのブラウザはファイルの読み取りをサポートしていません');
			}
			var myFile = document.querySelector('#myFile');
			myFile.onchange = 関数 () {
				var ファイル = myFile.files[0];
				reader.readAsDataURL(ファイル);
				reader.onload = 関数(){
					var data = reader.result; //base64 形式のファイル コンテンツ };
                reader.onerror = 関数(){
                    console.log('読み取りに失敗しました');
                    コンソールログ(リーダー.エラー);
                }
			};
		</スクリプト>
	</本文>
</html>

FileReader を使用してローカル ディスクのファイルを読み取る際の問題

js ファイルを実行します (js ファイルをプロジェクトの src の下に配置します)

(1) java.net.URL url = TestScriptEngine.class.getClassLoader().getResource("a.js");
(2)//System.out.println(url.getPath().substring(1).replace("%20", " "));
(3)FileReader fileReader = new FileReader(url.getPath());

ランタイム

表示: スレッド「main」で例外が発生しました java.io.FileNotFoundException: D:\Eclipse%20WorkSpace\(java300)ScriptManager\bin\a.js (指定されたパスが見つかりません)

url.getPath() をローカルファイルディレクトリの「D:/Eclipse WorkSpace/(java300)ScriptManager/bin/a.js」に変更すると、ファイルを正常に読み取ることができます。

url.getPath() の値は次のとおりです: D:\Eclipse%20WorkSpace\(java300)ScriptManager\bin\a.js ただし、読み込みファイルが見つかりません

問題は「%20」です。Eclipse WorkSpace の間にスペースがあり、システムが自動的にそれを %20 に置き換えてしまい、操作中にエラーが発生します。

url.getPath() で処理を行い、url.getPath().substring(1).replace("%20", " ") で %20 を " " スペースに置き換えると、問題は解決します。

上記は私の個人的な経験です。参考になれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • js でファイル コントロールの完全なパスを取得するにはどうすればよいでしょうか?
  • JavaScript と fileReader を組み合わせて画像をアップロードする
  • Javascript ファイルと Blob の詳細な説明
  • js 画像アップロードにおけるファイル、bolb、base64 画像間の変換

<<:  CSS 画面サイズ適応実装例

>>:  Linux システムで crontab を使用して MySQL データベースを定期的にバックアップする方法

推薦する

MySQL での外部キーの作成、制約、削除

序文MySQL バージョン 3.23.44 以降では、InnoDB エンジン タイプのテーブルは外部...

Docker Compose ワンクリック ELK デプロイ方式の実装

インストールFilebeat は、より軽量でより安全なため、Logstash-Forwarder に...

CSS 表示テーブルの適応的な高さと幅の問題の解決策

定義と使用法display プロパティは、要素が生成するボックスのタイプを指定します。例示するこの属...

CSS の Flex レイアウトを使用してシンプルな縦棒グラフを作成する方法

以下は、Flex レイアウトを使用した棒グラフです。 HTML: <div class=&qu...

ページに間隔を空けてグリッドレイアウトを完璧に実装する方法

典型的なレイアウト例上の写真のように、正方形の真ん中に一定の隙間があり、その隙間は固定されています。...

WeChatアプレットはふるいを振る効果を実現

この記事では、WeChatアプレットの具体的なコードを参考までに共有します。具体的な内容は次のとおり...

Windows 8.1 で MySQL5.7 のルート パスワードを忘れた場合の解決方法

【背景】最近勉強中に非常に恥ずかしいことに遭遇しました。MySQL のパスワードを忘れてしまい、My...

VueはExcelデータをエクスポートするパブリック関数メソッドをカプセル化します

vue+element UI は Excel データをエクスポートするためのパブリック関数をカプセル...

Win7 の VMware 仮想マシンに Linux7.2 をインストールするインターネット アクセス構成チュートリアル

参考までに、win7システム上のVMware仮想マシンにlinux7.2インターネットアクセス構成を...

MySql SQL最適化のヒントの共有

ある日、内部結合を含む SQL ステートメントの実行速度はそれほど遅くはない (0.1 ~ 0.2)...

Docker Swarm サービス オーケストレーション コマンドの詳細な説明

1. はじめにDocker には、タスクを構成する複数の Docker コンテナをオーケストレーショ...

iPhone デバイスの WAP ページでフォントサイズが大きい問題の解決策

JavaScriptコントロールを使用したくない場合は、次の方法を試してください。 Safariブラ...

TypeScript ジェネリックを簡単に説明する方法

目次概要ジェネリック医薬品とはビルドシステムジェネリック医薬品の一般的な理解ジェネリッククラスジェネ...

Vue開発ウェブサイトSEO最適化方法の詳細な説明

ページデータの表示には Vue などの js のデータバインディング機構が使用されるため、クローラー...

JavaScript の基本: ループと配列

目次ループ - for forループの基本的な使い方ループを終了するネストされたループ配列配列とは何...