views:

34

answers:

2

Hi folks I am a complete novice to Flash (never created anything in flash). I am quite familiar with web applications (J2EE based) and have a reasonable expertise in Javascript.

Here is my requirement.

I want the user to select (via an html form) an image. Normally in the post, this image would be sent to server and may be stored there to be served later. I do not want that. I want to store this image locally and then serve it via HTTP to the user.

So, the flow is: 1. Go to the "select image url":mywebsite.com/selectImage

Browse the image and select the image

This would transfer control locally to some code running on the client (Javascript or flash), which would then store the image locally at some place on the client machine.

  1. Go to the "show image url": mywebsite.com/showImage

This would eventually result in some client code running on the browser that retrieves the image and renders it (without any server round trips.)

I considered the following options:

  1. Use HTML5 local storage. Since I am a complete novice to flash, I looked into this. I found that it is fairly straightforward to store and retrieve images in javascript (only strings are allowed but I am hoping storing base64 encoded strings would work at least for small images). However, how do I serve the image via http url that points to my server without a server round trip? I saw the interesting article at http://hacks.mozilla.org/category/fileapi/ but that would work only in firefox and I need to work on all latest browsers (at least the ones supporting HTML5 local storage)

  2. Use flash SharedObjects. OK, this would have been good - the only thing is I am not sure where to start. Snippets of actionscripts to do this are scattered everywhere but I do not know how to use those scripts in an actual html page:) I do not need to create any movies or anything - just need to store an image and serve it locally. If I go this route, I would also use it to store other "strings" locally. If you suggest this, please give me the exact steps (could be pointers to other web sites) on how to do this. I would like to avoid paying for any flash development environment software ideally:)

Thank you!

A: 

You could use a data URI to display the file. Essentially you use the image data (plus a prefix) as the src attribute of an image element. If you already figured out how to read the file into memory as a base64 encoded string, using a data URI would probably be the easiest way to display the image.

Matti Virkkunen
Hi MattiThank you, I was just looking at the demo of fileApi and noticed it also used data uri - was not aware of it till you mentioned it. That may seem like a good alternative - I will try it out and see if it works!
serverman
Though I just realized that we still have to send the image to the server in this case at least once (in javascript you can not access the client file - except via FileAPI that as I mentioned is not supported in all browsers yet.)
serverman
FolksMy current plan is to try and use localStorage and data uri as suggested by Matti.Are there any other solutions to this question (including flash based ones?)
serverman
A: 

OK I was able to implement the following solution (just in case anyone has any comments or would like to know the answer)

  1. wrote server side code that takes an image and returns its base 64 encoded version.
  2. used the hidden iframe trick to get the base 64 encoded data into an iframe and stored it into the image by dynamically changing the image source to the data uri

For the "hidden iframe trick" - in case you are interested, there is a good article at (see www.openjs.com/articles/ajax/ajax_file_upload/response_data.php)

The only limitation is that IE does not work with images whose base 64 encoded string exceeds 32K - see http://msdn.microsoft.com/en-us/ie/dd578309.aspx. Note that only IE 8 works - IE 7 does not support data uri I believe.

serverman