1. --****************************************************************************
  2. -- Software: FLASH UPLOAD CLASS
  3. -- Version:  1.2
  4. -- Date:     2011-11-04
  5. -- Author:   Valentin Schmidt
  6. -- Contact:  fluxus@freenet.de
  7. -- License:  Freeware
  8. --
  9. --****************************************************************************
  10.  
  11. property pFilename
  12. property pUrl
  13. property pAllTypes
  14. property pFileRef
  15. property pMaxSize
  16.  
  17. property pCbHandler
  18. property pCbTarget
  19.  
  20. property pPrivateData -- arbitrary data that is passed along to the callback
  21. property pStatus -- either "idle" or "running"
  22.  
  23. ----------------------------------------
  24. --
  25. ----------------------------------------
  26. on new me
  27.   return me.script -- SINGLETON
  28. end
  29.  
  30. ----------------------------------------
  31. --
  32. ----------------------------------------
  33. on mInit me, tUrl, tCbHandler, tCbTarget
  34.  
  35.   me.pUrl = tUrl
  36.   me.pCbHandler = tCbHandler
  37.   if voidP(tCbTarget) then tCbTarget=_movie
  38.   me.pCbTarget = tCbTarget
  39.   me.pAllTypes = void
  40.   me.pMaxSize = the maxInteger
  41.   me.pPrivateData = void
  42.  
  43.   listener = newObject("Object")
  44.   setCallback(listener, "onSelect", #onSelect, me)
  45.   setCallback(listener, "onCancel", #onCancel, me)
  46.   setCallback(listener, "onOpen", #onOpen, me)
  47.   setCallback(listener, "onProgress", #onProgress, me)
  48.   setCallback(listener, "onComplete", #onComplete, me)
  49.   setCallback(listener, "onHTTPError", #onHTTPError, me)
  50.   setCallback(listener, "onIOError", #onIOError, me)
  51.  
  52.   me.pFileRef = newObject("flash.net.FileReference")
  53.   me.pFileRef.addListener(listener)
  54.  
  55.   me.pStatus = "idle"
  56. end
  57.  
  58. ----------------------------------------
  59. --
  60. ----------------------------------------
  61. on mDestroy me
  62.   pAllTypes = VOID
  63.   pFileRef = VOID
  64. end
  65.  
  66. ----------------------------------------
  67. --
  68. ----------------------------------------
  69. on mStartUpload me, tUrl, tPrivateData
  70.   me.pPrivateData = tPrivateData
  71.   if not voidP(tUrl) then me.pUrl = tUrl
  72.   if voidP(me.pAllTypes) then pFileRef.browse()
  73.   else pFileRef.browse(me.pAllTypes)
  74. end
  75.  
  76. ----------------------------------------
  77. --
  78. ----------------------------------------
  79. on mSetFileSizeLimit (me, tSize)
  80.   me.pMaxSize = tSize
  81. end
  82.  
  83. ----------------------------------------
  84. --
  85. ----------------------------------------
  86. on mSetFileTypes (me, tDescription, tExtensions)
  87.   me.pAllTypes = newObject("Array")
  88.   imageTypes = newObject("Object")
  89.   imageTypes.description = tDescription
  90.   imageTypes.extension = tExtensions
  91.   me.pAllTypes.push(imageTypes)
  92. end
  93.  
  94. --**************************************
  95. -- PRIVATE
  96. --**************************************
  97.  
  98. ----------------------------------------
  99. --
  100. ----------------------------------------
  101. on onSelect me, listener, fileRef
  102.   me._dbg("onSelect: " & fileRef.name)
  103.   me.pFilename = fileRef.name
  104.   if fileRef.size > me.pMaxSize then
  105.     me._dbg("Selected file exceeds limit (filesize="&fileRef.size&")")
  106.     call(pCbHandler, pCbTarget, false, me.pFilename, -1, me.pPrivateData)
  107.     return
  108.   end if
  109.  
  110.   tUrl = pUrl&"?f="&URLEncode(me.pFilename)
  111.   ok =  me.pFileRef.upload( tUrl )
  112.  
  113.   if not(ok) then
  114.     me._dbg("Upload dialog failed to open.")
  115.   else
  116.     me._progressInit()
  117.   end if
  118.   me.pStatus = "running"
  119. end
  120. ----------------------------------------
  121. --
  122. ----------------------------------------
  123. on onCancel me, listener, fileRef
  124.   me._dbg("onCancel")
  125.   me.pStatus = "idle"
  126. end
  127.  
  128. ----------------------------------------
  129. --
  130. ----------------------------------------
  131. on onOpen me, listener, fileRef
  132.   me._dbg("onOpen: " & fileRef.name)
  133. end
  134.  
  135. ----------------------------------------
  136. --
  137. ----------------------------------------
  138. on onProgress me, listener, fileRef, bytesLoaded, bytesTotal
  139.   me._dbg("onProgress with bytesLoaded: " & bytesLoaded & " bytesTotal: " & bytesTotal)
  140.   me._progressShow(bytesLoaded/bytesTotal)
  141. end
  142.  
  143. ----------------------------------------
  144. --
  145. ----------------------------------------
  146. on onComplete me, listener, fileRef
  147.   me._dbg("onComplete: " & fileRef.name)
  148.   me._progressDestroy()
  149.   me.pStatus = "idle"
  150.   call(pCbHandler, pCbTarget, true, me.pFilename, void, me.pPrivateData)
  151. end
  152.  
  153. ----------------------------------------
  154. --
  155. ----------------------------------------
  156. on onHTTPError me, listener, fileRef, httpError
  157.   me._dbg("onHTTPError: " & me.pFileRef.name &" Error:"+httpError)
  158.   me._progressDestroy()
  159.   me.pStatus = "idle"
  160.   call(pCbHandler, pCbTarget, false, me.pFilename, integer(httpError), me.pPrivateData)
  161. end
  162.  
  163. ----------------------------------------
  164. --
  165. ----------------------------------------
  166. on onIOError me, listener, fileRef
  167.   me._dbg("onIOError: " & me.pFileRef.name)
  168.   me._progressDestroy()
  169.   me.pStatus = "idle"
  170.   call(pCbHandler, pCbTarget, false, me.pFilename, -2, me.pPrivateData)
  171. end
  172.  
  173. ----------------------------------------
  174. -- overwrite!
  175. ----------------------------------------
  176. on _dbg (me, str)
  177.   dbg(str)
  178. end
  179.  
  180. ----------------------------------------
  181. -- PROGRESS-BAR HOOKS: overwrite!
  182. ----------------------------------------
  183.  
  184. ----------------------------------------
  185. --
  186. ----------------------------------------
  187. on _progressInit me
  188.   -- me.pProg = script("ProgressDialog").new("File is uploaded...",0,1,1)
  189. end
  190.  
  191. ----------------------------------------
  192. --
  193. ----------------------------------------
  194. on _progressShow me, val
  195.   -- me.pProg.mShowProgress(val)
  196.   put "PROGRESS:" && val
  197. end
  198.  
  199. ----------------------------------------
  200. --
  201. ----------------------------------------
  202. on _progressDestroy me
  203.   -- me.pProg.mDestroy()
  204. end
  205.  
[raw code]