snipplrCallback({"id":61694,"title":"as3--cached-image-from-url","source":"
  1. package components<\/div><\/li>
  2. {<\/span><\/div><\/li>
  3. \timport<\/span> com.adobe<\/span>.crypto<\/span>.MD5<\/span>;<\/div><\/li>
  4.  <\/div><\/li>
  5. \timport<\/span> flash.events<\/span>.Event<\/span>;<\/div><\/li>
  6. \timport<\/span> flash.filesystem<\/span>.File<\/span>;<\/div><\/li>
  7. \timport<\/span> flash.filesystem<\/span>.FileMode<\/span>;<\/div><\/li>
  8. \timport<\/span> flash.filesystem<\/span>.FileStream<\/span>;<\/div><\/li>
  9. \timport<\/span> flash.net<\/span>.URLLoader<\/span>;<\/div><\/li>
  10. \timport<\/span> flash.net<\/span>.URLLoaderDataFormat<\/span>;<\/div><\/li>
  11. \timport<\/span> flash.net<\/span>.URLRequest<\/span>;<\/div><\/li>
  12. \timport<\/span> spark.components<\/span>.Image<\/span>;<\/div><\/li>
  13.  <\/div><\/li>
  14. \tpublic<\/span> class<\/span> CachedImage extends<\/span> Image<\/div><\/li>
  15. \t{<\/span><\/div><\/li>
  16.  <\/div><\/li>
  17. \t\tprivate<\/span> var<\/span> _imageIdentifier:String<\/span> = ""<\/span>;<\/div><\/li>
  18. \t\tprivate<\/span> var<\/span> urlLoader:URLLoader = new<\/span> URLLoader(<\/span>)<\/span>;<\/div><\/li>
  19. \t\tprivate<\/span> var<\/span> _fromCache:Boolean<\/span> = false<\/span>;<\/div><\/li>
  20.  <\/div><\/li>
  21. \t\tpublic<\/span> function<\/span> CachedImage(<\/span>)<\/span><\/div><\/li>
  22. \t\t{<\/span><\/div><\/li>
  23. \t\t\tsuper<\/span>(<\/span>)<\/span>;<\/div><\/li>
  24. \t\t}<\/span><\/div><\/li>
  25.  <\/div><\/li>
  26. \t\tpublic<\/span> function<\/span> get<\/span> fromCache(<\/span>)<\/span>:Boolean<\/span><\/div><\/li>
  27. \t\t{<\/span><\/div><\/li>
  28. \t\t\treturn<\/span> _fromCache;<\/div><\/li>
  29. \t\t}<\/span><\/div><\/li>
  30.  <\/div><\/li>
  31. \t\tpublic<\/span> function<\/span> set<\/span> fromCache(<\/span>value:Boolean<\/span>)<\/span>:void<\/span><\/div><\/li>
  32. \t\t{<\/span><\/div><\/li>
  33. \t\t\t_fromCache = value;<\/div><\/li>
  34. \t\t}<\/span><\/div><\/li>
  35.  <\/div><\/li>
  36. \t\tpublic<\/span> function<\/span> get<\/span> imageIdentifier(<\/span>)<\/span>:String<\/span><\/div><\/li>
  37. \t\t{<\/span><\/div><\/li>
  38. \t\t\treturn<\/span> _imageIdentifier;<\/div><\/li>
  39. \t\t}<\/span><\/div><\/li>
  40.  <\/div><\/li>
  41. \t\tpublic<\/span> function<\/span> set<\/span> imageIdentifier(<\/span>value:String<\/span>)<\/span>:void<\/span><\/div><\/li>
  42. \t\t{<\/span><\/div><\/li>
  43. \t\t\t_imageIdentifier = value;<\/div><\/li>
  44. \t\t}<\/span><\/div><\/li>
  45.  <\/div><\/li>
  46. \t\toverride public<\/span> function<\/span> get<\/span> source(<\/span>)<\/span>:Object<\/span><\/div><\/li>
  47. \t\t{<\/span><\/div><\/li>
  48. \t\t\treturn<\/span> super<\/span>.source<\/span>;<\/div><\/li>
  49. \t\t}<\/span><\/div><\/li>
  50.  <\/div><\/li>
  51. \t\toverride public<\/span> function<\/span> set<\/span> source(<\/span>value:Object<\/span>)<\/span>:void<\/span><\/div><\/li>
  52. \t\t{<\/span><\/div><\/li>
  53. \t\t\tif<\/span>(<\/span>!<\/span>_fromCache)<\/span> {<\/span><\/div><\/li>
  54. \t\t\t\tif<\/span>(<\/span>value is Class<\/span>)<\/span>{<\/span><\/div><\/li>
  55. \t\t\t\t\t\/\/ do nothing<\/span><\/div><\/li>
  56. \t\t\t\t}<\/span> else<\/span> if<\/span>(<\/span>value is String<\/span> ||<\/span> value is Object<\/span>)<\/span>{<\/span><\/div><\/li>
  57. \t\t\t\t\t\/\/Load cached image<\/span><\/div><\/li>
  58. \t\t\t\t\t_imageIdentifier = MD5.hash<\/span>(<\/span>String<\/span>(<\/span>value)<\/span>)<\/span>;<\/div><\/li>
  59.  <\/div><\/li>
  60. \t\t\t\t\t\/\/ Cache the image<\/span><\/div><\/li>
  61. \t\t\t\t\tvar<\/span> cacheFile:File= File.applicationStorageDirectory<\/span>.resolvePath<\/span>(<\/span>_imageIdentifier)<\/span>;<\/div><\/li>
  62. \t\t\t\t\tif<\/span> (<\/span>cacheFile.exists<\/span>)<\/span> {<\/span><\/div><\/li>
  63. \t\t\t\t\t\ttrace<\/span>(<\/span>"ImageCache - Load Cached image from : "<\/span>+cacheFile.url<\/span>)<\/span>;<\/div><\/li>
  64. \t\t\t\t\t\t_fromCache = true<\/span>;<\/div><\/li>
  65. \t\t\t\t\t\tsuper<\/span>.source<\/span> = cacheFile.url<\/span>;<\/div><\/li>
  66. \t\t\t\t\t\treturn<\/span>;<\/div><\/li>
  67. \t\t\t\t\t}<\/span> else<\/span> {<\/span><\/div><\/li>
  68. \t\t\t\t\t\ttrace<\/span>(<\/span>"ImageCache - Cached image not found, create it"<\/span>)<\/span>;<\/div><\/li>
  69. \t\t\t\t\t\turlLoader.dataFormat<\/span> = URLLoaderDataFormat.BINARY<\/span>;<\/div><\/li>
  70. \t\t\t\t\t\turlLoader.load<\/span>(<\/span>new<\/span> URLRequest(<\/span>String<\/span>(<\/span>value)<\/span>)<\/span>)<\/span>;<\/div><\/li>
  71. \t\t\t\t\t\turlLoader.addEventListener<\/span>(<\/span>Event.COMPLETE<\/span>,imageLoaded)<\/span>;<\/div><\/li>
  72. \t\t\t\t\t\treturn<\/span>;<\/div><\/li>
  73. \t\t\t\t\t}<\/span><\/div><\/li>
  74. \t\t\t\t}<\/span><\/div><\/li>
  75. \t\t\t}<\/span><\/div><\/li>
  76. \t\t\ttrace<\/span>(<\/span>"ImageCache - Load image from : "<\/span>+value)<\/span>;<\/div><\/li>
  77. \t\t\tsuper<\/span>.source<\/span> = value;<\/div><\/li>
  78. \t\t}<\/span><\/div><\/li>
  79.  <\/div><\/li>
  80. \t\t\/\/ when remote image is loaded, cache it !<\/span><\/div><\/li>
  81. \t\tprotected function<\/span> imageLoaded(<\/span>event:Event)<\/span>:void<\/span> {<\/span><\/div><\/li>
  82. \t\t\tvar<\/span> tilefile:File = File.applicationStorageDirectory<\/span>.resolvePath<\/span>(<\/span>_imageIdentifier)<\/span>;<\/div><\/li>
  83. \t\t\tif<\/span> (<\/span>tilefile.exists<\/span>)<\/span> {<\/span><\/div><\/li>
  84. \t\t\t\ttrace<\/span>(<\/span>"ImageCache - Already exist, recreate it"<\/span>)<\/span>;<\/div><\/li>
  85. \t\t\t\ttilefile.deleteFile<\/span>(<\/span>)<\/span>;<\/div><\/li>
  86. \t\t\t}<\/span><\/div><\/li>
  87. \t\t\ttrace<\/span>(<\/span>"ImageCache - Cache image"<\/span>)<\/span>;<\/div><\/li>
  88. \t\t\tvar<\/span> fileStream:FileStream = new<\/span> FileStream(<\/span>)<\/span>;<\/div><\/li>
  89. \t\t\tfileStream.open<\/span>(<\/span>tilefile, FileMode.WRITE<\/span>)<\/span>;<\/div><\/li>
  90. \t\t\tfileStream.writeBytes<\/span>(<\/span>urlLoader.data<\/span>)<\/span>;<\/div><\/li>
  91. \t\t\tfileStream.close<\/span>(<\/span>)<\/span>;<\/div><\/li>
  92. \t\t\t_fromCache = true<\/span>;<\/div><\/li>
  93. \t\t\tsuper<\/span>.source<\/span> = tilefile.url<\/span>;<\/div><\/li>
  94. \t\t}<\/span><\/div><\/li>
  95. \t}<\/span><\/div><\/li>
  96. }<\/span><\/div><\/li><\/ol><\/pre>","link":"https:\/\/snipplr.com\/view\/61694\/as3--cached-image-from-url"});