From 33058f2b292b3a581333bdfb21b8f671898c5060 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:40:17 -0500 Subject: initial commit --- files/ja/web/api/file/file/index.html | 72 +++ files/ja/web/api/file/filename/index.html | 37 ++ files/ja/web/api/file/filesize/index.html | 38 ++ files/ja/web/api/file/getasbinary/index.html | 77 +++ files/ja/web/api/file/getasdataurl/index.html | 68 +++ files/ja/web/api/file/getastext/index.html | 84 ++++ files/ja/web/api/file/index.html | 99 ++++ files/ja/web/api/file/lastmodified/index.html | 112 +++++ files/ja/web/api/file/lastmodifieddate/index.html | 87 ++++ files/ja/web/api/file/mozfullpath/index.html | 19 + files/ja/web/api/file/name/index.html | 73 +++ files/ja/web/api/file/type/index.html | 72 +++ .../using_files_from_web_applications/index.html | 514 +++++++++++++++++++++ .../ja/web/api/file/webkitrelativepath/index.html | 90 ++++ 14 files changed, 1442 insertions(+) create mode 100644 files/ja/web/api/file/file/index.html create mode 100644 files/ja/web/api/file/filename/index.html create mode 100644 files/ja/web/api/file/filesize/index.html create mode 100644 files/ja/web/api/file/getasbinary/index.html create mode 100644 files/ja/web/api/file/getasdataurl/index.html create mode 100644 files/ja/web/api/file/getastext/index.html create mode 100644 files/ja/web/api/file/index.html create mode 100644 files/ja/web/api/file/lastmodified/index.html create mode 100644 files/ja/web/api/file/lastmodifieddate/index.html create mode 100644 files/ja/web/api/file/mozfullpath/index.html create mode 100644 files/ja/web/api/file/name/index.html create mode 100644 files/ja/web/api/file/type/index.html create mode 100644 files/ja/web/api/file/using_files_from_web_applications/index.html create mode 100644 files/ja/web/api/file/webkitrelativepath/index.html (limited to 'files/ja/web/api/file') diff --git a/files/ja/web/api/file/file/index.html b/files/ja/web/api/file/file/index.html new file mode 100644 index 0000000000..ed312c9a9c --- /dev/null +++ b/files/ja/web/api/file/file/index.html @@ -0,0 +1,72 @@ +--- +title: File.File() +slug: Web/API/File/File +tags: + - API + - File + - File API + - Reference + - コンストラクター +translation_of: Web/API/File/File +--- +
{{APIRef("File")}}
+ +

File() コンストラクターは新しい {{domxref("File")}} オブジェクトのインスタンスを生成します。

+ +

構文

+ +
File(bits, name [, options]);
+ +

引数

+ +
+
bits
+
{{jsxref("Array")}}、{{domxref("ArrayBuffer")}}、{{domxref("ArrayBufferView")}}、{{domxref("Blob")}}、{{domxref("USVString")}} の {{jsxref("Array")}} オブジェクト、またはそれらをあわせたものを {{domxref("File")}} 内に格納します。USVString オブジェクトは UTF-8 でエンコードされます。
+
name
+
ファイル名またはファイルへのパスを表す {{domxref("USVString")}}。
+
options {{optional_inline}}
+
ファイルのオプション属性を含むオプションオブジェクト。利用可能なオプションは以下の通りです。 +
    +
  • type: ファイルの中に入るコンテンツの MIME タイプを表す {{domxref("DOMString")}} です。既定値は "" です
  • +
  • lastModified: UNIX 時刻方式のミリ秒単位で、ファイルが最後に更新された時刻を表す数値です。既定値は {{jsxref("Date.now()")}} です。
  • +
+
+
+ +

+ +
var file = new File(["foo"], "foo.txt", {
+  type: "text/plain",
+});
+ +

仕様

+ + + + + + + + + + + + + + + + +
仕様書状態備考
{{SpecName('File API')}}{{Spec2('File API')}}初回定義
+ +

ブラウザの対応

+ + + +

{{Compat("api.File.File")}}

+ +

関連情報

+ + diff --git a/files/ja/web/api/file/filename/index.html b/files/ja/web/api/file/filename/index.html new file mode 100644 index 0000000000..8096f58d4e --- /dev/null +++ b/files/ja/web/api/file/filename/index.html @@ -0,0 +1,37 @@ +--- +title: File.fileName +slug: Web/API/File/fileName +tags: + - API + - DOM + - File API + - Files + - Non-standard + - Obsolete + - Property + - Reference +translation_of: Web/API/File/fileName +--- +

{{APIRef("File API")}}{{non-standard_header}}{{obsolete_header(7.0)}}

+ +

ファイルの名前を返します。セキュリティ上の理由から、このプロパティからパスは除外されます。

+ +
このプロパティは非推奨です。代わりに {{domxref("File.name")}} を使用してください。
+ +

構文

+ +
var name = instanceOfFile.fileName
+ +

+ +

文字列

+ +

仕様策定状況

+ +

どの仕様書でも策定されていません。

+ +

あわせて参照

+ + diff --git a/files/ja/web/api/file/filesize/index.html b/files/ja/web/api/file/filesize/index.html new file mode 100644 index 0000000000..21ee3a0562 --- /dev/null +++ b/files/ja/web/api/file/filesize/index.html @@ -0,0 +1,38 @@ +--- +title: File.fileSize +slug: Web/API/File/fileSize +tags: + - DOM + - File API + - Files + - Non-standard + - Obsolete + - Property + - Reference + - ファイル + - プロパティ +translation_of: Web/API/File/fileSize +--- +

{{APIRef("File API") }}{{non-standard_header}}{{obsolete_header(7.0)}}

+ +

ファイルオブジェクトの容量をバイト単位で返します。

+ +
このプロパティは非推奨です。代わりに {{domxref("File.size")}} を使用してください。
+ +

構文

+ +
var size = instanceOfFile.fileSize
+ +

+ +

数値

+ +

仕様策定状況

+ +

どの仕様書でも策定されていません。

+ +

あわせて参照

+ + diff --git a/files/ja/web/api/file/getasbinary/index.html b/files/ja/web/api/file/getasbinary/index.html new file mode 100644 index 0000000000..e6b74acb06 --- /dev/null +++ b/files/ja/web/api/file/getasbinary/index.html @@ -0,0 +1,77 @@ +--- +title: File.getAsBinary() +slug: Web/API/File/getAsBinary +tags: + - API + - File API + - Reference + - ファイル + - メソッド + - 廃止 + - 非標準 +translation_of: Web/API/File/getAsBinary +--- +

{{APIRef("File API")}}

+ +

{{non-standard_header}}

+ +

{{obsolete_header(7.0)}}

+ +

概要

+ +

getAsBinary メソッドを使用すると、生のバイナリ形式でファイルのデータにアクセスできます。

+ +
+

メモ: このメソッドは廃止されました。代わりに{{domxref("FileReader")}} メソッドである {{domxref("FileReader.readAsArrayBuffer()","readAsArrayBuffer()")}}、もしくは {{domxref("FileReader.readAsBinaryString()","readAsBinaryString()")}}  を実行してください。

+
+ +

構文

+ +
var binary = instanceOfFile.getAsBinary();
+ +

返値

+ +

文字列です。

+ +

+ +
// fileInput is an HTMLInputElement: <input type="file" id="myfileinput" multiple>
+var fileInput = document.getElementById("myfileinput");
+
+// files は NodeList と似た FileList オブジェクトへの参照
+var files = fileInput.files;
+
+// 許容するメディアタイプを記したオブジェクト
+var accept = {
+  binary : ["image/png", "image/jpeg"],
+  text   : ["text/plain", "text/css", "application/xml", "text/html"]
+};
+
+var file;
+
+for (var i = 0; i < files.length; i++) {
+  file = files[i];
+
+  // ファイルタイプが見つからない場合の処理
+  if (file !== null) {
+    if (accept.binary.indexOf(file.type) > -1) {
+      // バイナリファイルの場合の処理
+      var data = file.getAsBinary();
+    } else if (accept.text.indexOf(file.type) > -1) {
+      // テキストファイルの場合の処理
+      var data = file.getAsText();
+      // String のメソッドでデータを加工する処理など…
+    }
+  }
+}
+ +

仕様書

+ +

どの仕様書にも含まれていません。

+ +

関連情報

+ + diff --git a/files/ja/web/api/file/getasdataurl/index.html b/files/ja/web/api/file/getasdataurl/index.html new file mode 100644 index 0000000000..4d73665494 --- /dev/null +++ b/files/ja/web/api/file/getasdataurl/index.html @@ -0,0 +1,68 @@ +--- +title: File.getAsDataURL() +slug: Web/API/File/getAsDataURL +tags: + - API + - File API + - Obsolete + - Reference + - ファイル + - メソッド + - 廃止 + - 非標準 +translation_of: Web/API/File/getAsDataURL +--- +
{{APIRef("File API") }}
+ +

{{non-standard_header}}

+ +

{{deprecated_header(7.0)}}

+ +

概要

+ +

getAsDataURL は、参照されるファイルの内容全体をエンコードした data: URL を提供します。

+ +
+

メモ: このメソッドは廃止されました。代わりに {{domxref("FileReader")}} の {{domxref("FileReader.readAsDataURL","readAsDataURL()")}} メソッドを使用する必要があります。

+
+ +

構文

+ +
var url = instanceOfFile.getAsDataURL();
+ +

返値

+ +

data: URL を表す文字列

+ +

+ +
// fileInput is a HTMLInputElement: <input type="file" id="myfileinput" multiple>
+var fileInput = document.getElementById("myfileinput");
+
+// files is a FileList object (similar to NodeList)
+var files = fileInput.files;
+
+// array with acceptable file types
+var accept = ["image/png"];
+
+// img is a HTMLImgElement: <img id="myimg">
+var img = document.getElementById("myimg");
+
+// if we accept the first selected file type
+if (accept.indexOf(files[0].mediaType) > -1) {
+  // display the image
+  // same as <img src="data:image/png,<imagedata>">
+  img.src = files[0].getAsDataURL();
+}
+
+ +

仕様書

+ +

どの仕様書にも含まれていません。

+ +

関連情報

+ + diff --git a/files/ja/web/api/file/getastext/index.html b/files/ja/web/api/file/getastext/index.html new file mode 100644 index 0000000000..b0711a798d --- /dev/null +++ b/files/ja/web/api/file/getastext/index.html @@ -0,0 +1,84 @@ +--- +title: File.getAsText() +slug: Web/API/File/getAsText +tags: + - API + - File API + - Reference + - ファイル + - メソッド + - リファレンス + - 廃止 + - 非標準 +translation_of: Web/API/File/getAsText +--- +

{{APIRef("File API") }}{{non-standard_header}}

+ +

{{obsolete_header(7.0)}}

+ +

概要

+ +

getAsText メソッドは、テキストとして解釈されるファイルのデータを指定されたエンコーディングを使用して提供します。

+ +
+

メモ: このメソッドは廃止されています。代わりに {{domxref("FileReader")}} の {{domxref("FileReader.readAsText()","readAsText()")}} メソッドを使用してください。

+
+ +

構文

+ +
var str = instanceOfFile.getAsText(encoding);
+ +

引数

+ +
+
encoding
+
返されるデータに使用するエンコーディングを示す文字列。この文字列が空の場合は、 UTF-8 が使用されます。
+
+ +

返値

+ +

指定された encoding のテキストとして解釈されるファイルのデータを含む文字列。

+ +

+ +
// fileInput is a HTMLInputElement: <input type="file" id="myfileinput" multiple>
+var fileInput = document.getElementById("myfileinput");
+
+// files is a FileList object (similar to NodeList)
+var files = fileInput.files;
+
+// object for allowed media types
+var accept = {
+  binary : ["image/png", "image/jpeg"],
+  text   : ["text/plain", "text/css", "application/xml", "text/html"]
+};
+
+var file;
+
+for (var i = 0; i < files.length; i++) {
+  file = files[i];
+
+  // if file type could be detected
+  if (file !== null) {
+    if (accept.text.indexOf(file.mediaType) > -1) {
+      // file is of type text, which we accept
+      // make sure it's encoded as utf-8
+      var data = file.getAsText("utf-8");
+      // modify data with string methods
+
+    } else if (accept.binary.indexOf(file.mediaType) > -1) {
+      // binary
+    }
+  }
+}
+ +

仕様書

+ +

どの仕様書にも含まれていません。

+ +

関連情報

+ + diff --git a/files/ja/web/api/file/index.html b/files/ja/web/api/file/index.html new file mode 100644 index 0000000000..578692cbe2 --- /dev/null +++ b/files/ja/web/api/file/index.html @@ -0,0 +1,99 @@ +--- +title: File +slug: Web/API/File +tags: + - API + - File API + - Interface + - Reference + - Web +translation_of: Web/API/File +--- +
{{APIRef}}
+ +

File インターフェイスは、ファイルについての情報を提供したり、ウェブページ内の JavaScript からその内容にアクセスできるようにしたりします。

+ +

File オブジェクトは通常、 {{HTMLElement("input")}} 要素を使用してファイルを選択した結果として返される {{DOMxRef("FileList")}} オブジェクト、ドラッグ&ドロップ操作の {{DOMxRef("DataTransfer")}} オブジェクト、または {{DOMxRef("HTMLCanvasElement")}} 上の mozGetAsFile() API から取得します。

+ +

File オブジェクトは特別な種類の {{domxref("Blob")}} オブジェクトであり、 Blob が利用できる場面ではどこでも利用できます。特に、{{DOMxRef("FileReader")}}、{{DOMxRef("URL.createObjectURL()")}}、{{DOMxRef("ImageBitmapFactories.createImageBitmap()", "createImageBitmap()")}}、{{DOMxRef("XMLHttpRequest", "", "send()")}} は、BlobFile の両方を受け付けます。

+ +

詳しい情報や例は、ウェブアプリケーションからのファイルの使用 を参照してください。

+ +

{{InheritanceDiagram}}

+ +

コンストラクター

+ +
+
{{DOMxRef("File.File", "File()")}}
+
新しく構築された File オブジェクトを返します。
+
+ +

インスタンスプロパティ

+ +
+
{{DOMxRef("File.prototype.lastModified")}} {{ReadOnlyInline}}
+
ファイルの最終更新時刻を、 UNIX 元期 (1970年1月1日深夜) からの経過ミリ秒数で返します。
+
{{DOMxRef("File.prototype.lastModifiedDate")}} {{Deprecated_Inline}} {{ReadOnlyInline}}
+
File オブジェクトが参照しているファイルの最終更新時刻の {{JSxRef("Date")}} を返します。
+
{{DOMxRef("File.prototype.name")}}{{ReadOnlyInline}}
+
File オブジェクトが参照しているファイルの名前を返します。
+
{{DOMxRef("File.prototype.webkitRelativePath")}} {{Non-standard_Inline}} {{ReadOnlyInline}}
+
{{DOMxRef("File")}} の URL の相対パスを返します。
+
+ +

File は {{DOMxRef("Blob")}} を実装しているので、以下のようなプロパティも利用できます。

+ +
+
{{DOMxRef("File.prototype.size")}} {{ReadOnlyInline}}
+
ファイルのサイズをバイト単位で返します。
+
{{DOMxRef("File.prototype.type")}} {{ReadOnlyInline}}
+
ファイルの MIME タイプを返します。
+
+ +

インスタンスメソッド

+ +

File インターフェイスはメソッドを定義せず、{{DOMxRef("Blob")}} インターフェイスからメソッドを継承しています。

+ +
+
{{DOMxRef("Blob.prototype.slice()", "Blob.prototype.slice([start[, end[, contentType]]])")}}
+
ソース Blob の指定したバイト数の範囲のデータを含む新しい Blob オブジェクトを返します。
+
{{DOMxRef("Blob.prototype.stream()")}}
+
File を {{DOMxRef("ReadableStream")}} に変換し、File の内容を読み込めるようにします。
+
{{DOMxRef("Blob.prototype.text()")}}
+
File をストリームに変換し、最後まで読み込みます。これは、{{DOMxRef("USVString")}} (テキスト) で解決するプロミスを返します。
+
{{DOMxRef("Blob.prototype.arrayBuffer()")}}
+
File をストリームに変換し、最後まで読み込みます。 {{DOMxRef("ArrayBuffer")}} で解決するプロミスを返します。
+
+ +

仕様書

+ + + + + + + + + + + + + + + + +
仕様書状態備考
{{SpecName('File API')}}{{Spec2('File API')}}初回定義
+ +

ブラウザーの互換性

+ + + +

{{Compat("api.File")}}

+ +

関連情報

+ + diff --git a/files/ja/web/api/file/lastmodified/index.html b/files/ja/web/api/file/lastmodified/index.html new file mode 100644 index 0000000000..5ffcc10a2a --- /dev/null +++ b/files/ja/web/api/file/lastmodified/index.html @@ -0,0 +1,112 @@ +--- +title: File.lastModified +slug: Web/API/File/lastModified +tags: + - API + - File API + - ファイル + - プロパティ + - リファレンス +translation_of: Web/API/File/lastModified +--- +
{{APIRef("File")}}
+ +

File.lastModified 読み取り専用プロパティは、ファイルの最終更新日時を UNIX エポック (1970 年 1 月 1 日の深夜 0 時) からのミリ秒数で返します。最終更新日時がわからないファイルは、現在の日時を返します。

+ +

構文

+ +
var time = instanceOfFile.lastModified;
+
+ +

+ +

UNIX エポックからのミリ秒数を表す数値。

+ +

+ +

file 入力欄からの読み込み

+ +
<input type="file" multiple id="fileInput">
+
+ +
const fileInput = document.querySelector('#fileInput');
+fileInput.addEventListener('change', (event) => {
+  // filesはFileList型オブジェクト (NodeListと似ている)
+  const files = event.target.files;
+
+  for (let file of files) {
+    const date = new Date(file.lastModified);
+    console.log(`${file.name} has a last modified date of ${date}`);
+  }
+});
+ +

以下の結果を試してみてください。

+ +

{{ EmbedLiveSample('Reading_from_file_input', 300, 50) }}

+ +

動的に生成されるファイル

+ +

ファイルが動的に生成された場合、最終更新日時は {{domxref("File.File()", "new File()")}} コンストラクター関数で指定できます。ファイルが見つからない場合、 lastModifiedFile オブジェクトの作成時に {{jsxref("Date.now()")}} から現在の時刻を継承します。

+ +
var fileWithDate = new File([], 'file.bin', {
+  lastModified: new Date(2017, 1, 1),
+});
+console.log(fileWithDate.lastModified); //returns 1485903600000
+
+var fileWithoutDate = new File([], 'file.bin');
+console.log(fileWithoutDate.lastModified); //returns current time
+
+ +

時間の精度の低下

+ +

タイミング攻撃やフィンガープリンティングに対する保護機能を提供するために、someFile.lastModified の精度はブラウザーの設定に応じて丸められることがあります。
+ Firefox では、privacy.reduceTimerPrecision 設定は既定で有効になっており、 Firefox 59 では既定で 20 us に設定されています。60 で 2 ms になります。

+ +
// reduced time precision (2ms) in Firefox 60
+someFile.lastModified;
+// 1519211809934
+// 1519211810362
+// 1519211811670
+// ...
+
+
+// reduced time precision with `privacy.resistFingerprinting` enabled
+someFile.lastModified;
+// 1519129853500
+// 1519129858900
+// 1519129864400
+// ...
+
+ +

Firefox では、privacy.resistFingerprinting を有効にすることもできます。精度は 100 ms か privacy.resistFingerprinting.reduceTimerPrecision.microseconds のいずれか大きい方の値になります。

+ +

仕様書

+ + + + + + + + + + + + + + + + +
仕様書状態備考
{{SpecName('File API', '#file-attrs', 'lastModified')}}{{Spec2('File API')}}初回定義
+ +

ブラウザーの対応

+ + + +

{{Compat("api.File.lastModified")}}

+ +

関連情報

+ + diff --git a/files/ja/web/api/file/lastmodifieddate/index.html b/files/ja/web/api/file/lastmodifieddate/index.html new file mode 100644 index 0000000000..571ffd8949 --- /dev/null +++ b/files/ja/web/api/file/lastmodifieddate/index.html @@ -0,0 +1,87 @@ +--- +title: File.lastModifiedDate +slug: Web/API/File/lastModifiedDate +tags: + - API + - File + - File API + - lastModifiedDate + - ファイル + - プロパティ + - リファレンス + - 読み取り専用 + - 非推奨 +translation_of: Web/API/File/lastModifiedDate +--- +
+

{{APIRef("File API") }} {{deprecated_header}}

+ +

File.lastModifiedDate 読み取り専用プロパティは、ファイルの最終更新日を返します。最終更新日がわからないファイルは、現在の日付を返します。

+ +

構文

+ +
var time = instanceOfFile.lastModifiedDate
+ +

+ +

ファイルが最後に変更された日時を示す Date オブジェクトです。

+ +

+ +
var fileInput = document.getElementById("myfileinput");
+// fileInput は HTMLInputElement オブジェクトを参照するものとする: <input type="file" multiple id="myfileinput">
+
+var files = fileInput.files;
+// files は (NodeList に似た) FileList オブジェクトを参照
+
+for (var i = 0; i < files.length; i++) {
+  alert(
+    files[i].name +
+    " (最終更新日:  " +
+    files[i].lastModifiedDate +
+    ")"
+  );
+}
+
+ +

短縮された時間精度

+ +

タイミング攻撃やフィンガープリンティングに対する保護機能を提供するため、someFile.lastModifiedDate.getTime() の精度がブラウザの設定に応じて丸められることがあります。

+ +

Firefox では、privacy.reduceTimerPrecision 設定はデフォルトで有効になっており、Firefox 59 ではデフォルトで 20 us に設定されています。60 で 2 ms になります。

+ +
// reduced time precision (2ms) in Firefox 60
+someFile.lastModifiedDate.getTime();
+// 1519211809934
+// 1519211810362
+// 1519211811670
+// ...
+
+
+// reduced time precision with `privacy.resistFingerprinting` enabled
+someFile.lastModifiedDate.getTime();
+// 1519129853500
+// 1519129858900
+// 1519129864400
+// ...
+ +

Firefox では、privacy.resistFingerprinting を有効にすることもできます。精度は 100 ms か privacy.resistFingerprinting.reduceTimerPrecision.microseconds のいずれか大きい方の値になります。

+ +

仕様

+ +

File API 仕様の初期のドラフトにありますが、このプロパティは削除されており、現在は非標準です。代わりに{{domxref("File.lastModified")}} を使用してください。

+ +

ブラウザの互換性

+ +
+ + +

{{Compat("api.File.lastModifiedDate")}}

+
+ +

あわせて参照

+ + +
diff --git a/files/ja/web/api/file/mozfullpath/index.html b/files/ja/web/api/file/mozfullpath/index.html new file mode 100644 index 0000000000..d0daa94b99 --- /dev/null +++ b/files/ja/web/api/file/mozfullpath/index.html @@ -0,0 +1,19 @@ +--- +title: File.mozFullPath +slug: Web/API/File/mozFullPath +tags: + - API + - File + - File API + - Files + - NeedsContent + - mozFullPath + - ファイル + - プロパティ + - リファレンス + - 非標準 +translation_of: Web/API/File/mozFullPath +--- +

{{APIRef("File API")}}{{draft}}{{Non-standard_header}}

+ +

{{domxref("File")}} インターフェイスに対する特権的な拡張として、mozFullPath プロパティには、表現されたファイルの絶対パス名が含まれます。 このプロパティはブラウザコード、または古いスタイルの XPCOM ベースの Firefox 拡張機能でのみ使用できます。Web コンテンツでは使用できません。

diff --git a/files/ja/web/api/file/name/index.html b/files/ja/web/api/file/name/index.html new file mode 100644 index 0000000000..d4877be4b9 --- /dev/null +++ b/files/ja/web/api/file/name/index.html @@ -0,0 +1,73 @@ +--- +title: File.name +slug: Web/API/File/name +tags: + - API + - File API + - Files + - Property + - Reference + - プロパティ +translation_of: Web/API/File/name +--- +
{{APIRef("File API")}}
+ +

{{domxref("File")}} オブジェクトによって表されるファイルの名前を返します。セキュリティ上の理由から、パスはこのプロパティから除外されます。

+ +

構文

+ +
var name = file.name;
+ +

+ +

"My Resume.rtf" のように、パスのないファイルの名前を含む文字列。

+ +

+ +
<input type="file" multiple onchange="processSelectedFiles(this)">
+
+ +
function processSelectedFiles(fileInput) {
+  var files = fileInput.files;
+
+  for (var i = 0; i < files.length; i++) {
+    alert("Filename " + files[i].name);
+  }
+}
+ +

以下の結果を確認してください。

+ +

{{ EmbedLiveSample('Example', 300, 50) }}

+ +

仕様書

+ + + + + + + + + + + + + + + + +
仕様書状態備考
{{SpecName('File API', '#file-attrs', 'name')}}{{Spec2('File API')}}初回定義
+ +

ブラウザーの互換性

+ +
+ + +

{{Compat("api.File.name")}}

+
+ +

関連情報

+ + diff --git a/files/ja/web/api/file/type/index.html b/files/ja/web/api/file/type/index.html new file mode 100644 index 0000000000..260a470380 --- /dev/null +++ b/files/ja/web/api/file/type/index.html @@ -0,0 +1,72 @@ +--- +title: File.type +slug: Web/API/File/type +tags: + - API + - File API + - Reference + - ファイル + - ファイルタイプ + - プロパティ +translation_of: Web/API/File/type +--- +
{{APIRef("File API")}}
+ +

{{domxref("File")}} オブジェクトによって表されるファイルのメディアタイプ (MIME) を返します。

+ +

構文

+ +
var name = file.type;
+ +

+ +

ファイルのタイプを示すメディアタイプ (MIME) を含む文字列。たとえば、 PNG 画像の場合は "image/png" です。

+ +

+ +
<input type="file" multiple onchange="showType(this)">
+
+ +
function showType(fileInput) {
+  var files = fileInput.files;
+
+  for (var i = 0; i < files.length; i++) {
+    var name = files[i].name;
+    var type = files[i].type;
+    alert("Filename: " + name + " , Type: " + type);
+  }
+}
+ +

メモ: 現在の実装に基づけば、ブラウザーは実際にファイルのバイトストリームを読み取ってメディアタイプを判断している訳ではありません。ファイルの拡張子に基づいて推測します。 PNG 画像ファイルを .txt に改名すると "text/plain" となり、"image/png" とはなりません。さらに file.type は一般的に、画像、 HTML 文書、音声、動画などの一般的なファイルタイプに対してのみ信頼できます。一般的ではないファイルの拡張子に対しては、空の文字列を返します。クライアントの構成 (Windows レジストリなど) によっては、一般的なタイプの場合でも予期しない値が発生することがあります。開発者は、このプロパティを唯一の検証方法として信頼しないことをお勧めします。

+ +

仕様

+ + + + + + + + + + + + + + + + +
仕様書状態備考
{{SpecName('File API', '#dfn-type', 'type')}}{{Spec2('File API')}}初回定義
+ +

ブラウザの対応

+ + + +

{{Compat("api.File.type")}}

+ +

関連情報

+ + diff --git a/files/ja/web/api/file/using_files_from_web_applications/index.html b/files/ja/web/api/file/using_files_from_web_applications/index.html new file mode 100644 index 0000000000..07228aabd8 --- /dev/null +++ b/files/ja/web/api/file/using_files_from_web_applications/index.html @@ -0,0 +1,514 @@ +--- +title: Web アプリケーションからのファイルの使用 +slug: Web/API/File/Using_files_from_web_applications +tags: + - Files + - HTML5 + - Intermediate + - NeedsUpdate + - ajax upload + - upload +translation_of: Web/API/File/Using_files_from_web_applications +--- +
{{APIRef("File API")}}
+ +

HTML5 から DOM に追加された File API によって、ウェブコンテンツがユーザーにローカルファイルを選択するように指示し、それらのファイルを読み取れるようになりました。この選択は HTML の {{HTMLElement("input/file", '<input type="file">')}} 要素か、ドラッグ&ドロップのどちらかを使用することで行うことができます。

+ +

File API を拡張機能や他の chrome コードから利用することもできます。この場合、もういくつか知っておきたい機能があります。詳細は DOM File API を chrome code で使う をご覧下さい。

+ +

選択されたファイルへのアクセス

+ +

この HTML を見てください。

+ +
<input type="file" id="input">
+ +

File API では、ユーザーが選択したファイルを表す {{DOMxRef("File")}} オブジェクトを含む {{DOMxRef("FileList")}} にアクセスすることができます。

+ +

input 要素の multiple 属性により、複数のファイルを選択することができます。

+ +

旧来の DOM セレクターを使って、最初に選択されたファイルにアクセスします。

+ +
const selectedFile = document.getElementById('input').files[0];
+ +

change イベントでの選択されたファイルへのアクセス

+ +

change イベントを通して {{DOMxRef("FileList")}} にアクセスすることも可能です (ただし必須ではありません)。このように {{DOMxRef("EventTarget.addEventListener()")}} を使って change イベントのリスナーを追加する必要があります。

+ +
const inputElement = document.getElementById("input");
+inputElement.addEventListener("change", handleFiles, false);
+function handleFiles() {
+  const fileList = this.files; /* ファイルリストを処理するコードがここに入る */
+}
+ +

選択されたファイルについての情報の取得

+ +

DOM が提供する {{DOMxRef("FileList")}} オブジェクトは、{{DOMxRef("File")}} オブジェクトとして指定された、ユーザーが選択したすべてのファイルをリストアップします。ファイルリストの length 属性の値をチェックすることで、ユーザーが選択したファイルの数を知ることができます。

+ +
const numFiles = fileList.length;
+ +

個々の {{DOMxRef("File")}} オブジェクトは、単に配列としてリストにアクセスするだけで取得できます。

+ +
for (let i = 0, numFiles = fileList.length; i < numFiles; i++) {
+  const file = fileList[i];
+  // ...
+}
+
+ +

このループは、ファイルリスト内のすべてのファイルを繰り返し処理します。

+ +

{{DOMxRef("File")}} オブジェクトには3つのプロパティがあり、ファイルに関する有益な情報を得られます。

+ +
+
name
+
読み取り専用の文字列としてのファイル名。これはファイル名のみで、パスに関する情報は含まれていません。
+
size
+
読み取り専用の64ビット整数によるバイト単位のファイルサイズです。
+
type
+
読み取り専用の文字列としてのファイルの MIME タイプ (読み取り専用)。MIME タイプが特定できないときは空文字列 ("") となります。
+
+ +

例: ファイルサイズを表示

+ +

次のコードは size プロパティを利用する例です。

+ +
<!DOCTYPE html>
+<html>
+<head>
+  <meta charset="UTF-8">
+  <title>File(s) size</title>
+</head>
+
+<body>
+  <form name="uploadForm">
+    <div>
+      <input id="uploadInput" type="file" name="myFiles" multiple>
+      選択されたファイル: <span id="fileNum">0</span>;
+      合計サイズ: <span id="fileSize">0</span>
+    </div>
+    <div><input type="submit" value="Send file"></div>
+  </form>
+
+  <script>
+  function updateSize() {
+    let nBytes = 0,
+        oFiles = this.files,
+        nFiles = oFiles.length;
+    for (let nFileId = 0; nFileId < nFiles; nFileId++) {
+      nBytes += oFiles[nFileId].size;
+    }
+    let sOutput = nBytes + " bytes";
+    // 倍数近似のための任意のコード
+    const aMultiples = ["KiB", "MiB", "GiB", "TiB", "PiB", "EiB", "ZiB", "YiB"];
+    for (nMultiple = 0, nApprox = nBytes / 1024; nApprox > 1; nApprox /= 1024, nMultiple++) {
+      sOutput = nApprox.toFixed(3) + " " + aMultiples[nMultiple] + " (" + nBytes + " bytes)";
+    }
+    // 任意コードの末尾
+    document.getElementById("fileNum").innerHTML = nFiles;
+    document.getElementById("fileSize").innerHTML = sOutput;
+  }
+
+  document.getElementById("uploadInput").addEventListener("change", updateSize, false);
+  </script>
+</body>
+</html>
+
+ +

click() メソッドを使い input 要素を隠す

+ +

見た目の悪い {{HTMLElement("input")}} 要素を隠し、独自のインターフェイスでファイル選択を開き、ユーザーが選択したファイルを表示することができます。 input 要素のスタイルを display: none とし、その上で {{DOMxRef("HTMLElement.click","click()")}} メソッドを {{HTMLElement("input")}} に対して呼び出すことで実現できます。

+ +

次のような HTML を考えてみましょう。

+ +
<input type="file" id="fileElem" multiple accept="image/*" style="display:none">
+<button id="fileSelect">いくつかのファイルを選択します。</button>
+ +

click イベントを扱うコードは次のようなものです。

+ +
const fileSelect = document.getElementById("fileSelect"),
+  fileElem = document.getElementById("fileElem");
+
+fileSelect.addEventListener("click", function (e) {
+  if (fileElem) {
+    fileElem.click();
+  }
+}, false);
+
+ +

ファイル選択を開く新しいボタンは、好きなようにスタイル付けできます。

+ +

label 要素を使用して隠した file input 要素を起動

+ +

JavaScript (click() メソッド) を使用せずにファイルピッカーを開けるようにするために、 {{HTMLElement("label")}} 要素を使用します。この場合、もし入力エレメントの display: none (または visibility: hidden) を設定して非表示に設定すると、ラベルがキーボードからアクセスできなくなります。代わりに、視覚的に非表示にする手法 (visually-hidden technique) を使用します。

+ +

次の HTMLを見てください。

+ +
<input type="file" id="fileElem" multiple accept="image/*" class="visually-hidden">
+<label for="fileElem">いくつかのファイルを選択します。</label>
+ +

そしてこの CSS です。

+ +
.visually-hidden {
+  position: absolute !important;
+  height: 1px;
+  width: 1px;
+  overflow: hidden;
+  clip: rect(1px, 1px, 1px, 1px);
+}
+
+/* 互換性のための別ルールとして、最近の Firefox と Chrome では :focus-within が必要です。 */
+input.visually-hidden:focus + label {
+  outline: thin dotted;
+}
+input.visually-hidden:focus-within + label {
+  outline: thin dotted;
+}
+
+ +

fileElem.click()を呼び出すための JavaScript コードを追加する必要はありません。またこの場合は、ラベル要素のスタイルを希望どおりに設定することもできます。前例のようにアウトラインに設定したり、background-color、box-shadow を設定したりして、ラベルの非表示入力フィールドのフォーカスステータスを視覚的に示す必要があります。(この記事を書いている時点では、Firefox は<input type="file"> 要素に対してこの視覚的な手がかりを表示していません)

+ +

ドラッグ & ドロップを使用したファイルの選択

+ +

ユーザーがファイルをウェブアプリケーションにドラッグ & ドロップすることもできます。

+ +

最初のステップは、ドロップゾーンを確立することです。コンテンツのどの部分がドロップを受け入れるかは、アプリケーションの設計によって異なりますが、要素をドロップイベントを受け取るのは簡単です。

+ +
let dropbox;
+
+dropbox = document.getElementById("dropbox");
+dropbox.addEventListener("dragenter", dragenter, false);
+dropbox.addEventListener("dragover", dragover, false);
+dropbox.addEventListener("drop", drop, false);
+
+ +

この例では、ID dropbox を持つ要素をドロップゾーンに指定しています。これは、{{event('dragenter')}}、{{event('dragover')}}、および {{event('drop')}} イベントのリスナーを追加することで行われます。

+ +

実際には、この場合、dragenterdragoverのイベントでは何もする必要はありませんので、これらの関数はどちらも簡単です。これらの関数はイベントの伝播を停止し、デフォルトのアクションが発生しないようにするだけです。

+ +
function dragenter(e) {
+  e.stopPropagation();
+  e.preventDefault();
+}
+
+function dragover(e) {
+  e.stopPropagation();
+  e.preventDefault();
+}
+
+ +

本当の魔術は drop() 関数の中で起こります。

+ +
function drop(e) {
+  e.stopPropagation();
+  e.preventDefault();
+
+  const dt = e.dataTransfer;
+  const files = dt.files;
+
+  handleFiles(files);
+}
+
+ +

ここでは、イベントから dataTransfer フィールドを取得し、そこからファイルリストを取得し、それを handleFiles() に渡します。これより先は、ユーザーが入力要素を使用したかドラッグ & ドロップを使用するかどうかにかかわらず、ファイルの処理方法は全く同じです。

+ +

例: ユーザが選択した画像のサムネイルを表示

+ +

次の素晴らしい写真共有サイトを開発していて、ユーザーが実際に画像をアップロードする前に HTML を使って画像のサムネイルプレビューを表示させたいとしましょう。前に説明したように input 要素やドロップゾーンを設定し、次の handleFiles() のような関数を呼び出せば良いのです。

+ +
function handleFiles(files) {
+  for (let i = 0; i < files.length; i++) {
+    const file = files[i];
+
+    if (!file.type.startsWith('image/')){ continue }
+
+    const img = document.createElement("img");
+    img.classList.add("obj");
+    img.file = file;
+    preview.appendChild(img); // 「プレビュー」とは、コンテンツが表示される div 出力のことを想定しています。
+
+    const reader = new FileReader();
+    reader.onload = (function(aImg) { return function(e) { aImg.src = e.target.result; }; })(img);
+    reader.readAsDataURL(file);
+  }
+}
+
+ +

ここでは、ユーザーが選択したファイルを処理するループが各ファイルの type 属性を見て、その MIME タイプが文字列 "image/" で始まるかどうかを確認しています)。画像である各ファイルに対して、新しい img 要素を作成します。CSS は、きれいな境界線や影を設定したり、画像のサイズを指定したりするために使用しますので、ここでは必要ありません。

+ +

各画像には CSS クラス obj が追加されており、DOM ツリーで簡単に見つけることができます。また、各画像に file 属性を追加し、画像の {{DOMxRef("File")}} を指定しています。これにより、後で実際にアップロードする画像を取得することができます。{{DOMxRef("Node.appendChild()")}} を使用して、ドキュメントのプレビュー領域に新しいサムネイルを追加します。

+ +

次に、画像の読み込みと img 要素へのアタッチを非同期で処理するための {{DOMxRef("FileReader")}} を確立します。新しい FileReader オブジェクトを作成した後、その onload 関数を設定し、readAsDataURL() を呼び出してバックグラウンドで読み込み処理を開始します。画像ファイルのコンテンツ全体が読み込まれると、それらは data: URL に変換され、onload コールバックに渡されます。このルーチンの実装では、img 要素の src 属性が読み込まれた画像に設定され、その結果、画像がユーザの画面のサムネイルに表示されます。

+ +

オブジェクト URL を利用する

+ +

DOM {{DOMxRef("URL.createObjectURL()")}} と {{DOMxRef("URL.revokeObjectURL()")}} メソッドを使用すると、ユーザーのコンピューター上のローカルファイルなど、DOM {{DOMxRef("File")}} オブジェクトを使用して参照可能なあらゆるデータを参照するために使用できるシンプルな URL 文字列を作成できます。

+ +

HTML から URL で参照したい {{DOMxRef("File")}} オブジェクトがある場合は、次のようにオブジェクト URL を作成します。

+ +
const objectURL = window.URL.createObjectURL(fileObj);
+ +

オブジェクト URL は {{DOMxRef("File")}} オブジェクトを識別する文字列です。 {{DOMxRef("URL.createObjectURL()")}} を呼び出すたびに、すでにそのファイルのオブジェクト URL を作成していても、一意のオブジェクト URL が作成されます。これらはそれぞれ解除する必要があります。これらはドキュメントがアンロードされると自動的に解放されますが、ページが動的にこれらを使用している場合は {{DOMxRef("URL.revokeObjectURL()")}} を呼び出して明示的に解放する必要があります。

+ +
URL.revokeObjectURL(objectURL);
+ +

例: オブジェクト URL で画像を表示

+ +

この例では、オブジェクト URL を使用して画像のサムネイルを表示しています。さらに、ファイル名やサイズなどの他のファイル情報も表示します。

+ +

インターフェースとなる HTML は次のようになります。

+ +
<input type="file" id="fileElem" multiple accept="image/*" style="display:none">
+<a href="#" id="fileSelect">いくつかのファイルを選択します。</a>
+<div id="fileList">
+  <p>選択されたファイルはありません!</p>
+</div>
+
+ +

これにより、ファイル {{HTMLElement("input")}} 要素と、ファイル ピッカーを呼び出すリンクが確立されます (あまり美しくないファイル入力を非表示にするため)。これは、ファイル ピッカーを呼び出すメソッドと同様に、セクション {{anch("click() メソッドを使用して非表示のファイル入力要素を使用する")}} で説明されています。

+ +

handleFiles() メソッドは次のようになります。

+ +
const fileSelect = document.getElementById("fileSelect"),
+    fileElem = document.getElementById("fileElem"),
+    fileList = document.getElementById("fileList");
+
+fileSelect.addEventListener("click", function (e) {
+  if (fileElem) {
+    fileElem.click();
+  }
+  e.preventDefault(); // "#" への移動を防ぐ
+}, false);
+
+fileElem.addEventListener("change", handleFiles, false);
+
+function handleFiles() {
+  if (!this.files.length) {
+    fileList.innerHTML = "<p>ファイルが選択されていません!</p>";
+  } else {
+    fileList.innerHTML = "";
+    const list = document.createElement("ul");
+    fileList.appendChild(list);
+    for (let i = 0; i < this.files.length; i++) {
+      const li = document.createElement("li");
+      list.appendChild(li);
+
+      const img = document.createElement("img");
+      img.src = URL.createObjectURL(this.files[i]);
+      img.height = 60;
+      img.onload = function() {
+        URL.revokeObjectURL(this.src);
+      }
+      li.appendChild(img);
+      const info = document.createElement("span");
+      info.innerHTML = this.files[i].name + ": " + this.files[i].size + " bytes";
+      li.appendChild(info);
+    }
+  }
+}
+
+ +

これは、{{HTMLElement("div")}} の URL を fileList という ID で取得することから始まります。これは、サムネイルを含むファイルリストを挿入するブロックです。

+ +

handleFiles() に渡された {{DOMxRef("FileList")}} オブジェクトが null の場合、ブロックの内部 HTML に「ファイルが選択されていません」と表示するように設定します。そうでない場合は、次のようにファイルリストの構築を開始します。

+ +
    +
  1. 新しく順序なしリスト ({{HTMLElement("ul")}}) 要素を作成します
  2. +
  3. 新しいリスト要素は、{{HTMLElement("div")}} ブロックの {{DOMxRef("Node.appendChild()")}} メソッドを呼び出して {{HTMLElement("div")}} ブロックに挿入されます
  4. +
  5. files で表される {{DOMxRef("FileList")}} 内の各 {{DOMxRef("File")}} に対して次の処理を実行します +
      +
    1. 新しくリスト項目 ({{HTMLElement("li")}}) 要素を作成し、リストに挿入します
    2. +
    3. 新しく画像 ({{HTMLElement("img")}}) 要素を作成します
    4. +
    5. {{DOMxRef("URL.createObjectURL()")}} を用いて、Blob の URL を作成して、画像のソースをファイルを表す新しいオブジェクト URL に設定します
    6. +
    7. 画像の高さを60ピクセルに設定します
    8. +
    9. 画像が読み込まれると不要になるため、画像の読み込みイベントハンドラを設定してオブジェクトの URL を解放します。これは {{DOMxRef("URL.revokeObjectURL()")}} メソッドを呼び出し、img.src で指定したオブジェクト URL 文字列を渡すことで行います
    10. +
    11. 新しいリスト項目をリストに追加する
    12. +
    +
  6. +
+ +

上のコードのライブデモはこちらです。

+ +

{{EmbedLiveSample('Example_Using_object_URLs_to_display_images', '100%', '300px')}}

+ +

例: ユーザが選択したファイルを送信

+ +

もう1つは、ユーザーが選択したファイルやファイル (先ほどの例で選択した画像など) をサーバーにアップロードできるようにすることです。これは非常に簡単に非同期で行うことができます。

+ +

アップロードタスクの生成

+ +

前の例でサムネイルを作成したコードの続きで、すべてのサムネイル画像が CSS クラス obj にあり、対応する {{DOMxRef("File")}}} が file 属性に添付されていることを思い出してください。これにより、このように{{DOMxRef("Document.querySelectorAll()")}}を使用して、ユーザーがアップロードするために選択した画像をすべて選択することができます。

+ +
function sendFiles() {
+  const imgs = document.querySelectorAll(".obj");
+
+  for (let i = 0; i < imgs.length; i++) {
+    new FileUpload(imgs[i], imgs[i].file);
+  }
+}
+
+ +

2 行目は、CSS クラス obj を持つドキュメント内のすべての要素の {{DOMxRef("NodeList")}}} を取得し imgs と呼ばれる変数に格納します。この例では、これらの要素はすべての画像サムネイルになります。このリストを取得したら、それを参照して、それぞれの新しい FileUpload インスタンスを作成するのは簡単です。それぞれが対応するファイルのアップロードを処理します。

+ +

ファイルのアップロード処理を行う

+ +

FileUpload 関数は2つの入力、画像要素と画像データを読み込むファイルを受け付けます。

+ +
function FileUpload(img, file) {
+  const reader = new FileReader();
+  this.ctrl = createThrobber(img);
+  const xhr = new XMLHttpRequest();
+  this.xhr = xhr;
+
+  const self = this;
+  this.xhr.upload.addEventListener("progress", function(e) {
+        if (e.lengthComputable) {
+          const percentage = Math.round((e.loaded * 100) / e.total);
+          self.ctrl.update(percentage);
+        }
+      }, false);
+
+  xhr.upload.addEventListener("load", function(e){
+          self.ctrl.update(100);
+          const canvas = self.ctrl.ctx.canvas;
+          canvas.parentNode.removeChild(canvas);
+      }, false);
+  xhr.open("POST", "http://demos.hacks.mozilla.org/paul/demos/resources/webservices/devnull.php");
+  xhr.overrideMimeType('text/plain; charset=x-user-defined-binary');
+  reader.onload = function(evt) {
+    xhr.send(evt.target.result);
+  };
+  reader.readAsBinaryString(file);
+}
+
+ +

上の FileUpload() 関数は、進捗情報を表示するための throbber を作成し、データのアップロードを処理するための {{DOMxRef("XMLHttpRequest")}} を作成します。

+ +

実際にデータを転送する前に、いくつかの準備段階があります。

+ +
    +
  1. XMLHttpRequest のアップロード progress リスナーは、アップロードの進捗に応じて最新の情報に基づいて throbber が更新されるように、新しいパーセンテージ情報で throbber を更新するように設定されています
  2. +
  3. XMLHttpRequest のアップロード load イベントハンドラは、進捗インジケータが実際に 100 % に達することを確認するために、throbber の進捗情報を 100 % に更新するように設定されています (プロセス中に粒度のクセがある場合)。そして、必要がなくなれば throbber を削除します。これにより、アップロードが完了すると throbber が消えます
  4. +
  5. 画像ファイルをアップロードするリクエストは、XMLHttpRequestopen() メソッドを呼び出して POST リクエストを生成することで開始されます
  6. +
  7. アップロードの MIME タイプは XMLHttpRequest 関数の overrideMimeType() を呼び出して設定します。この場合、一般的な MIME タイプを使用しています。ユースケースによっては MIME タイプを設定する必要がない場合もあります
  8. +
  9. FileReader オブジェクトを使用して、ファイルをバイナリ文字列に変換します
  10. +
  11. 最後に、コンテンツがロードされると、XMLHttpRequest 関数の send() が呼び出され、ファイルのコンテンツがアップロードされます
  12. +
+ +

ファイルのアップロード処理を非同期に扱う

+ +

この例では、サーバー側で PHP を使用し、クライアント側で JavaScript を使用して、ファイルの非同期アップロードを実演しています。

+ +
<?php
+if (isset($_FILES['myFile'])) {
+    // 例:
+    move_uploaded_file($_FILES['myFile']['tmp_name'], "uploads/" . $_FILES['myFile']['name']);
+    exit;
+}
+?><!DOCTYPE html>
+<html>
+<head>
+    <title>dnd binary upload</title>
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+    <script type="application/javascript">
+        function sendFile(file) {
+            const uri = "/index.php";
+            const xhr = new XMLHttpRequest();
+            const fd = new FormData();
+
+            xhr.open("POST", uri, true);
+            xhr.onreadystatechange = function() {
+                if (xhr.readyState == 4 && xhr.status == 200) {
+                    alert(xhr.responseText); // handle response.
+                }
+            };
+            fd.append('myFile', file);
+            // multipart/form-data のアップロードを開始します。
+            xhr.send(fd);
+        }
+
+        window.onload = function() {
+            const dropzone = document.getElementById("dropzone");
+            dropzone.ondragover = dropzone.ondragenter = function(event) {
+                event.stopPropagation();
+                event.preventDefault();
+            }
+
+            dropzone.ondrop = function(event) {
+                event.stopPropagation();
+                event.preventDefault();
+
+                const filesArray = event.dataTransfer.files;
+                for (let i=0; i<filesArray.length; i++) {
+                    sendFile(filesArray[i]);
+                }
+            }
+        }
+    </script>
+</head>
+<body>
+    <div>
+        <div id="dropzone" style="margin:30px; width:500px; height:300px; border:1px dotted grey;">Drag & drop your file here...</div>
+    </div>
+</body>
+</html>
+
+ +

例: オブジェクト URL を使用して PDF を表示

+ +

オブジェクト URL は画像以外にも使用できます。埋め込まれた PDF ファイルや、ブラウザーで表示可能な他のリソースを表示するために使用できます。

+ +

Firefox では、 PDF が iframe 内に埋め込まれて表示されるようにするには (ダウンロードファイルとして提案されるのではなく)、pdfjs.disabled の設定を false {{non-standard_inline()}} に設定する必要があります。

+ +
<iframe id="viewer">
+
+ +

そして、src 属性の変更点はこちらです。

+ +
const obj_url = URL.createObjectURL(blob);
+const iframe = document.getElementById('viewer');
+iframe.setAttribute('src', obj_url);
+URL.revokeObjectURL(obj_url);
+ +

例: 他のファイル形式でのオブジェクト URL の使用

+ +

他の形式のファイルも同じように操作できます。ここでは、アップロードされた動画をプレビューする方法を紹介します。

+ +
const video = document.getElementById('video');
+const obj_url = URL.createObjectURL(blob);
+video.src = obj_url;
+video.play();
+URL.revokeObjectURL(obj_url);
+ +

仕様書

+ + + + + + + + + + + + + + + + + + + + + +
仕様書状態備考
{{SpecName('HTML WHATWG', 'number-state.html#concept-input-type-file-selected', 'File upload state')}}{{Spec2('HTML WHATWG')}}
{{SpecName('File API')}}{{Spec2('File API')}}初回定義
+ +

関連情報

+ + diff --git a/files/ja/web/api/file/webkitrelativepath/index.html b/files/ja/web/api/file/webkitrelativepath/index.html new file mode 100644 index 0000000000..91e010dd01 --- /dev/null +++ b/files/ja/web/api/file/webkitrelativepath/index.html @@ -0,0 +1,90 @@ +--- +title: File.webkitRelativePath +slug: Web/API/File/webkitRelativePath +tags: + - File + - File API + - File System API + - File and Directory Entries API + - Non-standard + - Web + - webkitRelativePath + - プロパティ + - リファレンス + - 読み取り専用 + - 非標準 +translation_of: Web/API/File/webkitRelativePath +--- +

{{APIRef("File API")}}{{non-standard_header}}

+ +

File.webkitRelativePath は、{{htmlattrxref("webkitdirectory", "input")}} 属性が設定された {{HTMLElement("input")}} 要素でユーザーが選択したディレクトリに対するファイルのパスを指定する {{domxref("USVString")}} を含む読み取り専用のプロパティです。

+ +

構文

+ +
 relativePath = File.webkitRelativePath
+ +

+ +

ユーザーが選択した先祖ディレクトリを基準にしたファイルのパスを含む {{domxref("USVString")}}。

+ +

+ +

この例では、ユーザーが1つまたは複数のディレクトリを選択できるディレクトリピッカーが提示されています。{{event("change")}} イベントが発生すると、選択されたディレクトリ階層に含まれるすべてのファイルのリストが生成され、表示されます。

+ +

HTML コンテンツ

+ +
<input type="file" id="filepicker" name="fileList" webkitdirectory multiple />
+<ul id="listing"></ul>
+ +

JavaScript コンテンツ

+ +
document.getElementById("filepicker").addEventListener("change", function(event) {
+  let output = document.getElementById("listing");
+  let files = event.target.files;
+
+  for (let i=0; i<files.length; i++) {
+    let item = document.createElement("li");
+    item.innerHTML = files[i].webkitRelativePath;
+    output.appendChild(item);
+  };
+}, false);
+
+ +

結果

+ +

{{ EmbedLiveSample('Example') }}

+ +

仕様

+ + + + + + + + + + + + + + + + +
仕様書ステータスコメント
{{ SpecName('File System API', '#dom-file-webkitrelativepath', 'webkitRelativePath') }}{{ Spec2('File System API') }}初回定義
+ +

この API には、公式の W3C または WHATWG 仕様はありません。

+ +

ブラウザの互換性

+ + + +

{{Compat("api.File.webkitRelativePath")}}

+ +

あわせて参照

+ + -- cgit v1.2.3-54-g00ecf