概要
ファイルをページにドラッグ アンド ドロップすると、すべてのドラッグ アンド ドロップ関連イベントを通過するときに、event.dataTransfer.files を介してファイルを取得できます。各ファイル オブジェクトには name 属性があります。
ファイルをページに貼り付けると、onpaste イベントで event.clipboardData.items (これは配列でも通常のオブジェクトでもありませんが、余談になります) を介して「アイテム」を取得します。item オブジェクトには getAsFile() メソッドがありますが、これは File ではなく Blob を返すため、name 属性がありません。
私がやろうとしていること
後で画像をアップロードするときに、画像とともにメタデータとして保存するためにファイル名を送信できるように、ファイル名を取得したいと思います。
Chrome はただのバグですか?
この目的のために event.dataTransfer を再利用するだけだと思うかもしれませんが、それは未定義です。また、getAsFile() が File を返すと考えるかもしれませんが、やはりブラウザー メーカーは明白なことに反対することを決定しました。getAsFile の仕様は次のとおりです: http://www.w3.org/TR/html/editing.html#dom-datatransferitem-getasfile
避けられないコメントのいくつかを先取りします:
これはすべて、少なくとも Chrome では当てはまります。今のところ、Chrome と、おそらく最新バージョンの Safari と Firefox だけに関心があるとしましょう。
他の場所のコメントで、「明らかなセキュリティ上の懸念」のためにブラウザがファイルのコピー/貼り付けを「決して」許可しないと人々が考えているように見えるのを見たことがありますが、ドラッグアンドドロップは許可しているので、その欠陥をスキップしてください口論。
結論:
貼り付けたファイルの名前を取得する方法はありますか? これは Chrome の実装の単なるバグですか?
アップデート
問題を示す codepen でペンを作成しました: http://codepen.io/lerouxb/pen/hiLux また、Chrome に問題があるように見えるので、バグを送信しました: https://code.google.com/ p/chromium/issues/detail?id=361145