Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Jun 17th, 2012  |  syntax: None  |  size: 1.08 KB  |  hits: 21  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. (function() {
  2.  
  3. var f = document.getElementById('f');
  4.  
  5. if (f.files.length)
  6.   processFile();
  7.  
  8. f.addEventListener('change', processFile, false);
  9.  
  10.  
  11. function processFile(e) {
  12.   var file = f.files[0];
  13.   var size = file.size;
  14.   var sliceSize = 256;
  15.   var start = 0;
  16.  
  17.   setTimeout(loop, 1);
  18.  
  19.   function loop() {
  20.     var end = start + sliceSize;
  21.    
  22.     if (size - end < 0) {
  23.       end = size;
  24.     }
  25.    
  26.     var s = slice(file, start, end);
  27.  
  28.     send(s, start, end);
  29.  
  30.     if (end < size) {
  31.       start += sliceSize;
  32.       setTimeout(loop, 1);
  33.     }
  34.   }
  35. }
  36.  
  37.  
  38. function send(piece, start, end) {
  39.   var formdata = new FormData();
  40.   var xhr = new XMLHttpRequest();
  41.  
  42.   xhr.open('POST', '/upload', true);
  43.  
  44.   formdata.append('start', start);
  45.   formdata.append('end', end);
  46.   formdata.append('file', piece);
  47.  
  48.   xhr.send(formdata);
  49. }
  50.  
  51. /**
  52.  * Formalize file.slice
  53.  */
  54.  
  55. function slice(file, start, end) {
  56.   var slice = file.mozSlice ? file.mozSlice :
  57.               file.webkitSlice ? file.webkitSlice :
  58.               file.slice ? file.slice : noop;
  59.  
  60.   return slice.bind(file)(start, end);
  61. }
  62.  
  63. function noop() {
  64.  
  65. }
  66.  
  67. })();