Guest User

Untitled

a guest
Mar 9th, 2013
186
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.99 KB | None | 0 0
  1. /*
  2. * Upload files to the server using HTML 5 Drag and drop the folders on your local computer
  3. *
  4. * Tested on:
  5. * Mozilla Firefox 3.6.12
  6. * Google Chrome 7.0.517.41
  7. * Safari 5.0.2
  8. * Safari na iPad
  9. * WebKit r70732
  10. *
  11. * The current version does not work on:
  12. * Opera 10.63
  13. * Opera 11 alpha
  14. * IE 6+
  15. */
  16.  
  17. function uploader(place, status, targetPHP, show) {
  18.  
  19. // Upload image files
  20. upload = function(file) {
  21.  
  22. // Firefox 3.6, Chrome 6, WebKit
  23. if(window.FileReader) {
  24.  
  25. // Once the process of reading file
  26. this.loadEnd = function() {
  27. bin = reader.result;
  28. xhr = new XMLHttpRequest();
  29. xhr.open('POST', targetPHP+'?up=true', true);
  30. var boundary = 'xxxxxxxxx';
  31. var body = '--' + boundary + "\r\n";
  32. body += "Content-Disposition: form-data; name='upload'; filename='" + file.name + "'\r\n";
  33. body += "Content-Type: application/octet-stream\r\n\r\n";
  34. body += bin + "\r\n";
  35. body += '--' + boundary + '--';
  36. xhr.setRequestHeader('content-type', 'multipart/form-data; boundary=' + boundary);
  37. // Firefox 3.6 provides a feature sendAsBinary ()
  38. if(xhr.sendAsBinary != null) {
  39. xhr.sendAsBinary(body);
  40. // Chrome 7 sends data but you must use the base64_decode on the PHP side
  41. } else {
  42. xhr.open('POST', targetPHP+'?up=true&base64=true', true);
  43. xhr.setRequestHeader('UP-FILENAME', file.name);
  44. xhr.setRequestHeader('UP-SIZE', file.size);
  45. xhr.setRequestHeader('UP-TYPE', file.type);
  46. xhr.send(window.btoa(bin));
  47. }
  48. if (show) {
  49. var newFile = document.createElement('div');
  50. newFile.innerHTML = 'Loaded : '+file.name+' size '+file.size+' B';
  51. document.getElementById(show).appendChild(newFile);
  52. }
  53. if (status) {
  54. document.getElementById(status).innerHTML = 'Loaded : 100%<br/>Next file ...';
  55. }
  56. }
  57.  
  58. // Loading errors
  59. this.loadError = function(event) {
  60. switch(event.target.error.code) {
  61. case event.target.error.NOT_FOUND_ERR:
  62. document.getElementById(status).innerHTML = 'File not found!';
  63. break;
  64. case event.target.error.NOT_READABLE_ERR:
  65. document.getElementById(status).innerHTML = 'File not readable!';
  66. break;
  67. case event.target.error.ABORT_ERR:
  68. break;
  69. default:
  70. document.getElementById(status).innerHTML = 'Read error.';
  71. }
  72. }
  73.  
  74. // Reading Progress
  75. this.loadProgress = function(event) {
  76. if (event.lengthComputable) {
  77. var percentage = Math.round((event.loaded * 100) / event.total);
  78. document.getElementById(status).innerHTML = 'Loaded : '+percentage+'%';
  79. }
  80. }
  81.  
  82. // Preview images
  83. this.previewNow = function(event) {
  84. bin = preview.result;
  85. var img = document.createElement("img");
  86. img.className = 'addedIMG';
  87. img.file = file;
  88. img.src = bin;
  89. document.getElementById(show).appendChild(img);
  90. }
  91.  
  92. reader = new FileReader();
  93. // Firefox 3.6, WebKit
  94. if(reader.addEventListener) {
  95. reader.addEventListener('loadend', this.loadEnd, false);
  96. if (status != null)
  97. {
  98. reader.addEventListener('error', this.loadError, false);
  99. reader.addEventListener('progress', this.loadProgress, false);
  100. }
  101.  
  102. // Chrome 7
  103. } else {
  104. reader.onloadend = this.loadEnd;
  105. if (status != null)
  106. {
  107. reader.onerror = this.loadError;
  108. reader.onprogress = this.loadProgress;
  109. }
  110. }
  111. var preview = new FileReader();
  112. // Firefox 3.6, WebKit
  113. if(preview.addEventListener) {
  114. preview.addEventListener('loadend', this.previewNow, false);
  115. // Chrome 7
  116. } else {
  117. preview.onloadend = this.previewNow;
  118. }
  119.  
  120. // The function that starts reading the file as a binary string
  121. reader.readAsBinaryString(file);
  122.  
  123. // Preview uploaded files
  124. if (show) {
  125. preview.readAsDataURL(file);
  126. }
  127.  
  128. // Safari 5 does not support FileReader
  129. } else {
  130. xhr = new XMLHttpRequest();
  131. xhr.open('POST', targetPHP+'?up=true', true);
  132. xhr.setRequestHeader('UP-FILENAME', file.name);
  133. xhr.setRequestHeader('UP-SIZE', file.size);
  134. xhr.setRequestHeader('UP-TYPE', file.type);
  135. xhr.send(file);
  136.  
  137. if (status) {
  138. document.getElementById(status).innerHTML = 'Loaded : 100%';
  139. }
  140. if (show) {
  141. var newFile = document.createElement('div');
  142. newFile.innerHTML = 'Loaded : '+file.name+' size '+file.size+' B';
  143. document.getElementById(show).appendChild(newFile);
  144. }
  145. }
  146. }
  147.  
  148. // Function drop file
  149. this.drop = function(event) {
  150. event.preventDefault();
  151. var dt = event.dataTransfer;
  152. var files = dt.files;
  153. for (var i = 0; i<files.length; i++) {
  154. var file = files[i];
  155. upload(file);
  156. }
  157. }
  158.  
  159. // The inclusion of the event listeners (DragOver and drop)
  160.  
  161. this.uploadPlace = document.getElementById(place);
  162. this.uploadPlace.addEventListener("dragover", function(event) {
  163. event.stopPropagation();
  164. event.preventDefault();
  165. }, true);
  166. this.uploadPlace.addEventListener("drop", this.drop, false);
  167.  
  168. }
Add Comment
Please, Sign In to add comment