BlobからFileオブジェクトを作成する方法は?
質問
DataTransferItemList.add
は、javascriptでコピー操作をオーバーライドすることができます。しかし、これは
File
オブジェクトしか受け付けません。
コピーイベント
私の
copy
イベントのコードです。
var items = (event.clipboardData || event.originalEvent.clipboardData);
var files = items.items || items.files;
if(files) {
var blob = Blob.fromDataURL(_this.editor.selection.getSelectedImage().toDataURL("image/png"));
files.add(blob);
}
クロームでのエラーです。
Uncaught TypeError: 実行に失敗しました
add
でDataTransferItemList
: パラメータ1が型File
.
を試してみる
new File(Blob blob, DOMString name)
Google Chromeでは、こんな感じで試してみました。 は現在の仕様では :
var blob = Blob.fromDataURL(_this.editor.selection.getSelectedImage().toDataURL("image/png"));
var file = new File(blob, "image.png");
ここで問題なのは、Google Chromeがあまり仕様にこだわらないということです。
Uncaught TypeError: の構築に失敗しました。
File
: 不正なコンストラクタ
この場合、Firefoxもそうではありません。
メソッドパラメータがないか、無効です。
を試してみてください。
new File([Mixed blobParts], DOMString name, BlobPropertyBag options)
apsillers によって提案された解決策もうまくいきません。これは標準的な方法ではなく、両方で使用されている(しかし役に立たない)方法です。 Firefox と クローム .
バイナリデータ
blobを回避しようとしましたが、とにかくファイルコンストラクタが失敗しました。
//Canvas to binary
var data = atob( //atob (array to binary) converts base64 string to binary string
_this.editor.selection.getSelectedImage() //Canvas
.toDataURL("image/png") //Base64 URI
.split(',')[1] //Base64 code
);
var file = new File([data], "image.png", {type:"image/png"}); //ERROR
コンソールで試してみてください。
クローム <38
:
クローム >=38
:
ファイアフォックス
:
ブロブ
受け渡し
Blob
はおそらく正しく、Firefoxで動作します。
var file = new File([new Blob()], "image.png", {type:"image/png"});
Firefoxです。
クローム <38 :
クローム >=38 :
-
Q:
では、どうすれば
File
からBlob
?
ノート : Google Chromeをアップデートするように@apsillersから言われたので、スクリーンショットを追加しました。
解決方法は?
File コンストラクタ(Blob コンストラクタと同様)は部品の配列を受け取ります。パーツは DOMString である必要はありません。Blob、File、または型付き配列であることもできます。このように、Blob から File を簡単に構築することができます。
new File([blob], "filename")
仕様のプロセスや仕様そのものを理解する時間を取らないと、ブラウザが仕様を実装していないとか、仕様が役に立たないとかいう発言はご遠慮ください。
関連
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] jQueryで要素が非表示になっているかどうかを確認するには?
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] JavaScriptでオブジェクトをディープクローンする最も効率的な方法は何ですか?
-
[解決済み] GUID / UUIDの作成方法
-
[解決済み] JavaScriptのオブジェクトが空であることをテストするにはどうすればよいですか?
-
[解決済み】別のウェブページにリダイレクトするにはどうすればいいですか?
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
-
[解決済み] javascriptで2つの数値を連結する方法は?
-
[解決済み] JSXとLoadshを使用して、ある要素をn回繰り返す方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] JavaScriptでBlobをFileに変換する方法
-
[解決済み] WebStormで未解決の変数が大量にある場合の警告に対処する方法は?
-
[解決済み] 兄弟ノードを選択する方法はありますか?
-
[解決済み] 無効になっている入力フィールドの値を送信する
-
[解決済み] サブドメインにまたがってlocalStorageを使用する
-
[解決済み] CORS: 認証モードは 'include' です。
-
[解決済み] jQueryを使用して、すべてのクリックイベントハンドラを削除するにはどうすればよいですか?
-
[解決済み] 変異を伴わないオブジェクトからの値の削除
-
[解決済み] JavaScriptでDIVを表示・非表示にするには?
-
[解決済み] FormDataとしてアップロードされたBlobにファイル名を付けるには?