2016-02-02 2 views
5

なので、私はform64を使ってinputにbase64でエンコードされたイメージをPOSTする必要があります。 イメージのサイズ〜1.1MB、サイズ2500x1700。 Base64エンコードサイズ〜1.5MB。入力でbase64でエンコードされた画像でPOSTによるChromeのメモリリーク - 解決方法

私は入力ファイルと入力が隠された形式の2つの入力を持っています。隠された(FileReaderを使って画像をbase64に変換する)ために画像をダウンロードした後、私は入力ファイルの値をクリアしますので、余分なファイルはありません。

フォームページを送信しようとするとフリーズし、メモリ消費量が50%から93%(4Gb RAM)に増加し、その後Chromeがクラッシュします。

Firefoxでこのページを実行しようとしたとき(いつも遅くて遅いです)、余分なメモリを消費することなくインスタントポストを取得しました。

もちろん、私はこれをChromeの問題に投稿しますが、今私は知る必要があります:それを避けるためのトリックはありますか?まあ、おそらく私はこのバグを発見した最初の人ではない。


オクラホマので、FileReaderののonloadイベントで使用input.value = e.target.result場合、私は、メモリリークを取得します。等しい長さのカスタムテキストをinput.valueに設定すると、問題はありません。 したがって、e.target.resultが文字列であるため、FileReaderへの参照を保存することはできません(またはできますか?)。そこで私たちは、FileReaderの結果を受け取る際にネイティブのクロムの問題を持っています。


input.addEventListener("change", function() { 
    var reader = new FileReader(); 
    reader.onload = function(e) { 
    document.getElementById("input_hidden").value = e.target.result; 
    }; 
    reader.readAsDataURL(this.files[0]); 
}); 
+0

定期的なフォーム投稿や、いくつかのAjaxリクエストを使用していますか?どちらの方法でもコードを表示できます。そして、ファイル自体を送信できるときに、なぜbase64で送信するのですか? –

+0

コードが大きすぎます。それは普通の書式の投稿です。私は複数の入力ファイルを使用しているので、ユーザはいくつかのファイルを選択できます。しかし、私は送信する前にいくつかの画像をキャンセルするユーザーの能力を与える必要があります。私はinput [type = file] .filesを操作することができませんreadonly – user64675

+0

コードは "大きすぎるかもしれませんが、単純な例でこれを再現できない場合は、他に手伝ってくれるものはありません推測。 –

答えて

0

見えない<textarea>代わりのinput hiddenを使用してみてください。

それは次のようになります。

<textarea style="display:none" id="XXX"> 
$("XXX").value = base64 

またその後、DOMから削除し、完全input fileを削除するフォームタグの外にそれを維持することを確認してください。

希望します。

+0

残念ながら、 – user64675

関連する問題