fileReader に関する落とし穴画像閲覧にfileReaderを使用する場合、 base64形式を使用する var ファイル = this.$refs.resource.files[0] var リーダー = 新しい FileReader(); // ファイルを DataURL として読み取ります: reader.readAsDataURL(ファイル); // 読み取り後のコールバック js はマルチスレッドです reader.onloadend=(e)=>{ } Javascript 自体はシングルスレッドであり、非同期機能はありません。 Javascript はブラウザで使用され、ブラウザ自体が典型的な GUI ワーカー スレッドであるため、ほとんどのシステムでは、相互作用のブロックを回避するために GUI ワーカー スレッドがイベント処理として実装され、Javascript の非同期性が生まれます。その後に起こったことはすべてここから始まったのです。 そうです、ネットワーク、ファイル。 。 。 。すべてブラウザインターフェースに基づいて実装されています 同じファイルを2回読み込んだ場合、読み込み完了イベントは実行されません。 iOS における FileReader の落とし穴 (イメージを base64 に変換)最近、あるプロジェクトに取り組んでいます。写真をアップロードするのは非常に古い機能です。次に、写真を圧縮してbase64に直接アップロードしたいのですが...最初に使用したコード var fileUpload = function(obj, コールバック){ //ブラウザがFileReaderオブジェクトをサポートしているかどうかを確認します。if (typeof FileReader == "undefined") { alert("お使いのブラウザはFileReaderオブジェクトをサポートしていません!"); } var ファイル = obj; //タイプが画像かどうかを判断します if (!/image\/\w+/.test(file.type)){ alert("ファイルが画像タイプであることを確認してください"); false を返します。 } var リーダー = 新しい FileReader(); reader.onload = 関数 (e) { var img = 新しい画像、 width = 95, //画像のサイズ変更 width quality = 0.2, //画像の品質 canvas = document.createElement('canvas'), 引き出し = canvas.getContext("2d"); 結果: var scale = parseInt(img.height / img.width); 幅 = 幅; img.height = 幅 * スケール; キャンバスの幅 = img の幅; キャンバスの高さ = img.height; drawer.drawImage(testimgId, 0, 0, canvas.width, canvas.height); var base64 = canvas.toDataURL('image/jpeg', 0.2); コンソールログ(base64); var image_base64 = img.src.replace("data:image/png;base64,",""); image_base64=encodeURIコンポーネント(image_base64); 警告("19") //コールバックを呼び出す callback&&callback(img.src); } reader.readAsDataURL(ファイル); } 上記のコードは PC と Android では正常に動作しますが、iOS では、アップロードした画像に関係なく、base64 エンコードの固定文字列を返します。 では変更します... もう一度変更します..... 各種ドキュメントを表示します。 変化し続ける... これが最終的に解決された方法です 関数 getBase64(fileObj){ var ファイル = fileObj、 cvs = document.getElementById("キャンバス"), ctx = cvs.getContext("2d"); if(ファイル){ var url = window.URL.createObjectURL(file); //PS: IE と互換性がありません var img = 新しい画像(); url = 画像ファイル img.onload = 関数(){ ctx.clearRect(0,0,cvs.width,cvs.height); cvs.width = img.width; cvs.height = img.height; ctx.drawImage(画像、0、0、画像の幅、画像の高さ); var base64 = cvs.toDataURL("image/png"); コールバック(base64); 警告("20") } } } これが共有のポイントです... その理由は、FileReader オブジェクトが iOS ではサポートされていないためです。 上記は私の個人的な経験です。参考になれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: CSSのtranslate(-50%,-50%)は水平および垂直の中央揃え効果を実現します。
>>: MySQL ツリー構造テーブルの設計と最適化に関する簡単な説明
CSS 要素内の計算されたスタイル (つまり、カスケード後の最終的なスタイル) を取得するには、W3...
目次1. 要素の表示と非表示を制御する show() hide() 2. 要素の透明度を制御する f...
ポップアップは、現在のウィンドウにメニューツールバーがあるかどうかとは関係ありません。ページにスクリ...
目次1. マスタースレーブ同期原理マスタースレーブ同期アーキテクチャ図(非同期同期)マスタースレーブ...
まず、Navicat for MySQL をダウンロードしてインストールする必要があります。正規版の...
CentOS7 のデフォルトのファイアウォールは iptables ではなく、firewalle で...
目次前提条件DNSドメイン名解決プロセス外部ネットワークマッピングnginxコア知識nginxとはア...
ダウンロードアドレス: https://dev.mysql.com/downloads/mysql/...
成し遂げるこの効果は CSS を使用して完全に再現することは困難です。 CSS でシミュレートされた...
大規模な Web サイトでは、多数の同時アクセスを処理するために、Web サイト上の分散負荷分散以上...
Kubernetes は、アプリケーションの移植性とハイブリッド クラウド/マルチクラウドの展開をサ...
最近、MySQL の起動中にエラーが発生しました。エラー メッセージは次のとおりです。 エラー 20...
目次導入1. Tomcatを起動するコード2. Tomcatフレームワーク3. コンテナを作成する ...
問題の説明html <iframe id="h5Content" src=...