2011-07-17 3 views
4

アップロード前に新しいFileReader APIを使用して画像をプレビューしています。これはDataURLを使用して行われます。しかし、画像が大きい場合、DataURLは大量になる可能性があります。ユーザーが一度に複数の画像をアップロードし、実際にブラウザをかなりプレビューして実際にブラウザをかなり遅らせ、実際にクロムを数回クラッシュさせてしまうので、これは特に問題です。新しいFileReader APIとDataURLを使用したJavascriptプレビューは効率が悪いようです

アップロードする前にクライアントで画像をプレビューするためにDataURLを使用する方法はありますか?

答えて

3

クライアントのディスク(別の場所に、JavaScriptを使用してファイルにアクセスできるように)にデータを保存することもできます。それはしかし、すべてのブラウザでサポートされていない

http://www.html5rocks.com/en/tutorials/file/filesystem/

:それはこの主題に来るとき、この資料は非常に広範です。

window.requestFileSystem(window.PERSISTENT, 5*1024*1024, function(fs) { 
    fs.root.getFile(filename, {create: true}, function(fileEntry) { 
     fileEntry.createWriter(function(fileWriter) { 
      var arr = new Uint8Array(data.length); 

      // fill arr with image byte data here 

      var builder = new BlobBuilder(); 
      builder.append(arr.buffer); 
      var blob = builder.getBlob(); 

      fileWriter.write(blob); 

      location.href = fileEntry.toURL(); // navigate to file. The URL does not contain the data but only the path and filename. 
     }); 
    }); 
}, function() {}); 
+0

デュード:

あなたは、そのファイルを作成し、保管スペース(ファイルシステム)を要求、それにデータを書き込む、そして最終的にURLをフェッチする必要があります。すごいですね。私は非支持的なブラウザのための代替を持っているので、それはクールです。どうもありがとうございます。これは確かに大きな改善になるでしょう。私は本当にすべての新しいAPIを愛しています – rewolf

+0

DataURLsの代わりにwindow.URL.createObjectURLを使用することに利点がありますか? URL.createObjectURLを使用している – rewolf

+0

は、基本的に余分なコーディングがなく、大量のURL文字列を生成しないので、利用可能であれば、より良い解決策と思われます。 – rewolf

関連する問題