/modules/FileAssetModule/src/com/fileAsset/loaders/FileUploader.as

https://bitbucket.org/nidinthb/clink_virtual_classroom · ActionScript · 212 lines · 127 code · 31 blank · 54 comment · 6 complexity · 09ac3a815a927ac573e19461868725c3 MD5 · raw file

  1. package com.fileAsset.loaders
  2. {
  3. import com.fileAsset.events.FileLoaderEvent;
  4. import flash.display.DisplayObject;
  5. import flash.display.Loader;
  6. import flash.display.MovieClip;
  7. import flash.display.Sprite;
  8. import flash.errors.IOError;
  9. import flash.events.DataEvent;
  10. import flash.events.Event;
  11. import flash.events.EventDispatcher;
  12. import flash.events.IOErrorEvent;
  13. import flash.events.MouseEvent;
  14. import flash.events.ProgressEvent;
  15. import flash.net.FileFilter;
  16. import flash.net.FileReference;
  17. import flash.net.URLRequest;
  18. import flash.net.URLRequestMethod;
  19. import flash.utils.ByteArray;
  20. [Event(name="clientLoaded", type="com.fileAsset.events.FileLoaderEvent")]
  21. [Event(name="serverLoaded", type="com.fileAsset.events.FileLoaderEvent")]
  22. [Event(name="cancel", type="flash.events.Event")]
  23. /**
  24. * Loader class used for uploading files to a webserver through flash
  25. * This file has a companion php file called upload.php where the upload target path is set via get variables.
  26. *
  27. * @author adamrensel
  28. *
  29. */
  30. public class FileUploader extends EventDispatcher
  31. {
  32. private var _fileRef:FileReference;
  33. private var _progressBar:Sprite;
  34. private var _uploadLocation:String;
  35. private var _serverSideFileLocation:String;
  36. /**
  37. * the progress bar is an optional argument. The progressbar has it's scaleX property changed
  38. * according to file load progress, so make sure the bar will scale apropriately.
  39. *
  40. * @param progressBar
  41. *
  42. */
  43. public function FileUploader(progressBar:Sprite = null)
  44. {
  45. super();
  46. _progressBar = progressBar;
  47. init();
  48. }
  49. private function init():void
  50. {
  51. if(_progressBar)
  52. {
  53. _progressBar.visible = true;
  54. _progressBar.scaleX = 0;
  55. }
  56. }
  57. /////////////////////////////callbacks//////////////////////
  58. //file is selected
  59. private function onFileSelected(event:Event):void
  60. {
  61. _fileRef.addEventListener(Event.COMPLETE, onFileLoaded);
  62. _fileRef.addEventListener(IOErrorEvent.IO_ERROR, onFileLoadError);
  63. _fileRef.addEventListener(ProgressEvent.PROGRESS, onProgress);
  64. if(_progressBar)
  65. {
  66. _progressBar.visible = true;
  67. }
  68. _fileRef.load();
  69. }
  70. //changes the progress bar to indicate progress
  71. private function onProgress(e:ProgressEvent):void
  72. {
  73. if(_progressBar)
  74. {
  75. var percentLoaded:Number = e.bytesLoaded/e.bytesTotal;
  76. _progressBar.scaleX = percentLoaded;
  77. }
  78. }
  79. //when the client loads the file into flash
  80. private function onFileLoaded(e:Event):void
  81. {
  82. _fileRef.removeEventListener(Event.COMPLETE, onFileLoaded);
  83. _fileRef.removeEventListener(IOErrorEvent.IO_ERROR, onFileLoadError);
  84. _fileRef.removeEventListener(ProgressEvent.PROGRESS, onProgress);
  85. this.dispatchEvent(new FileLoaderEvent(FileLoaderEvent.CLIENT_LOADED));
  86. }
  87. //if there is an error uploading to the server or client
  88. private function onFileLoadError(e:Event):void
  89. {
  90. _fileRef.removeEventListener(Event.COMPLETE, onFileLoaded);
  91. _fileRef.removeEventListener(IOErrorEvent.IO_ERROR, onFileLoadError);
  92. _fileRef.removeEventListener(ProgressEvent.PROGRESS, onProgress);
  93. if(_progressBar)
  94. {
  95. _progressBar.visible = false;
  96. }
  97. trace("File load error");
  98. }
  99. //after the file is successfully uploaded to the server
  100. private function onserverUploadComplete(e:Event):void
  101. {
  102. _progressBar.visible = false;
  103. _fileRef.removeEventListener(ProgressEvent.PROGRESS, onProgress);
  104. _fileRef.removeEventListener(DataEvent.UPLOAD_COMPLETE_DATA,onserverUploadComplete);
  105. this.dispatchEvent(new FileLoaderEvent(FileLoaderEvent.SERVER_LOADED));
  106. }
  107. ///////////////////////public methods///////////////////////
  108. /**
  109. * Call this function first to pop up a browse window to choose a file.
  110. * Than other public methods can be called depending on what you want to to do.
  111. *
  112. * This will cause a CLIENT_LOADED event to be dispatched when the file has finished loading.
  113. * This will cause a UPLOAD_ERROR event if there is a problem uploading the file.
  114. */
  115. public function browseForFile():void
  116. {
  117. _fileRef=new FileReference();
  118. _fileRef.addEventListener(Event.SELECT, onFileSelected);
  119. var imageTypeFilter:FileFilter = new FileFilter("Images","*.jpeg; *.jpg;*.gif;*.png");
  120. var allTypeFilter:FileFilter = new FileFilter("Any File (*.*)","*.*");
  121. _fileRef.browse([imageTypeFilter, allTypeFilter]);
  122. }
  123. /**
  124. * Takes the stored file reference uploaded using the browserForFile method and stores it to a folder on the server
  125. * This requires a server side script to copy the file to the correct location, set the path to this file by setting the
  126. * serverSideFileLocation property
  127. *
  128. * This will cause a SERVER_LOADED event to be fired when the file has been uploaded successfully, and a UPLOAD_ERROR
  129. * event if there is an upload problem
  130. *
  131. * @param path:String path to where the file is to be uploaded to on the webserver
  132. * @param fileReference:FileReference option file Reference for uploading a different reference to the server, if this is null, than the internal filereference from browse is used.
  133. *
  134. */
  135. public function uploadToServer(path:String,fileReference:FileReference = null):void
  136. {
  137. if(_serverSideFileLocation)
  138. {
  139. //eliminate any spaces
  140. var filename:String=_fileRef.name.split(" ").join("_");
  141. var urlRequest:URLRequest = new URLRequest(_serverSideFileLocation + "?path=" + path);
  142. urlRequest.method = URLRequestMethod.POST;
  143. var fileRef:FileReference;
  144. if(fileReference)
  145. {
  146. _fileRef = fileReference;
  147. }
  148. _fileRef.addEventListener(ProgressEvent.PROGRESS, onProgress);
  149. _fileRef.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA,onserverUploadComplete);
  150. _fileRef.upload(urlRequest);
  151. }else{
  152. throw new Error("Unable to find the server side script, please set the location of the serverside script which handles the upload with the property - serverSideFileLocation");
  153. }
  154. }
  155. /**
  156. * returns the fileReference, this can be used with a loader and displayed if it's an image among other things
  157. * @return FileReference
  158. *
  159. */
  160. public function getFileReference():FileReference
  161. {
  162. return _fileRef;
  163. }
  164. /////////////////////////getters/setters////////////////////
  165. /**
  166. * Setter for the server side script which handles saving the file to the web server.
  167. * this must be set before calling the uploadToServer Method
  168. *
  169. * @param loc
  170. *
  171. */
  172. public function set serverSideFileLocation(loc:String):void
  173. {
  174. _serverSideFileLocation = loc;
  175. }
  176. public function get serverSideFileLocation():String
  177. {
  178. return _serverSideFileLocation;
  179. }
  180. }
  181. }