md5File.js 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. // 此文件在worker环境下运行。
  2. importScripts('md5.js');
  3. var fr = new FileReader();
  4. var Md5File = (function() {
  5. /*var throttle = 3,
  6. pool = [],
  7. wating = [];
  8. function _tick() {
  9. var avaibles = [],
  10. i, fr, cb;
  11. for ( i = 0; i < throttle; i++ ) {
  12. fr = pool[ i ];
  13. fr && fr.readyState === 2 && avaibles.push( fr );
  14. }
  15. while ( avaibles.length && wating.length ) {
  16. fr = avaibles.shift();
  17. cb = wating.shift();
  18. fr.onload = fr.onerror = null;
  19. cb( fr );
  20. fr.onloadend = _tick;
  21. }
  22. }
  23. function getReader( cb ) {
  24. var fr;
  25. if ( pool.length < throttle ) {
  26. fr = new FileReader();
  27. pool.push( fr );
  28. cb( fr );
  29. fr.onloadend = _tick;
  30. return;
  31. }
  32. wating.push( cb );
  33. _tick();
  34. }*/
  35. return function( file, cb ) {
  36. var reader = new FileReader();
  37. reader.onload = function() {
  38. cb( md5( this.result ) );
  39. reader.onload = reader.onerror = null;
  40. reader.readAsBinaryString( new Blob() );
  41. reader = null;
  42. };
  43. reader.onerror = function( e ) {
  44. reader = reader.onload = reader.onerror = null;
  45. };
  46. reader.readAsBinaryString( file );
  47. }
  48. })();
  49. onmessage = function( e ) {
  50. var file = e.data;
  51. Md5File( file, function( ret ) {
  52. postMessage( ret );
  53. });
  54. }