2

概要

ファイルをページにドラッグ アンド ドロップすると、すべてのドラッグ アンド ドロップ関連イベントを通過するときに、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

4

1 に答える 1

2

Chrome は、Clipboard API を完全に実装している唯一のブラウザーです。そして、お気づきのように、貼り付けられたアイテムは として利用可能になりますBlob。これが Chrome での Clipboard API の実装におけるエラーであるかどうかは、100% 明らかではありません。仕様ではそうである可能性が示唆されていますが、これは Chrome でしばらくの間行われていたため、回避する必要があります。ここでもう 1 つ考えられるのは、ファイルがなく、クリップボード データだけであるため、ファイル名がないということです。貼り付けた項目に「名前を付ける」場合は、ユーザーからの入力を求める必要があります。

于 2014-04-08T14:26:07.283 に答える