Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there any way to show transfer progress of base64 image string data sent from client to server?

My App involves heavy client side image manipulation. Since the files are modified so frequently during a users session we do not physically upload them to the server until the user is finished and chooses to save the image(s).

The images are read from the client using the html5 file API and stored in memory as base64 strings where the user proceeds to perform his/her manipulations quickly and efficiently.

When the user chooses to save we transfer the string or strings to the server via a standard ajax POST and then build the image into a physical file server-side.

What I would like to do is provide a progress bar for this final upload stage.

Now, I am well aware that the html5 spec includes support for file upload progress reporting. However we are not using the standard upload methods, instead, as mentioned above the images are sent as strings.

So my question really boils down to the following:

A) Is there anyway to actual measure the actual bytes sent during a simple post (PHP serverside). If so this would work as I already have the image size in bytes from the HTML5 filereader api.

B) If not is there anyway I can convert the base64 data into actual files on the fly and send them via the standard html5 upload method, reporting the progress as we go.

In either case... If so, how?

Many thanks in advance.

like image 637
gordyr Avatar asked Oct 21 '25 21:10

gordyr


2 Answers

It's easier when you send the Base64 image via ajax. Ajax works with a callback function, so just use an indicator of some sort to let the user know that ajax has been initiated (i.e. the file download has started ). On completion the callback function will run, now you can turn off the indicator whatever it might be.

As far as measuring actual bytes, via ajax I'm not sure.

This method

showing progressbar progress with ajax request

suggest estimating it. I would take it a step further and maybe time how long it take the callback over say 10 tries( use this average to estimate your progress bar and also use the 90% trick mentioned above ).

Or if you want to encode/decode your Base64 text.

How can you encode a string to Base64 in JavaScript?

Depending on the server technology you are using, there are several options.

  1. Use Comet or Javascript long polling to get the progress of the upload from the server, and update the progress bar from the client side

  2. If you are using .Net technologies in the backend, explore the SignalR library, which will provide all the plumbing to provide real time communication between the server and the client.

like image 36
Scorpion-Prince Avatar answered Oct 24 '25 11:10

Scorpion-Prince



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!