moxiecode / plupload

Plupload is JavaScript API for building file uploaders. It supports multiple file selection, file filtering, chunked upload, client side image downsizing and when necessary can fallback to alternative runtimes, like Flash and Silverlight.
http://www.plupload.com
GNU Affero General Public License v3.0
5.63k stars 1.42k forks source link

1.5.1.1 with Flash runtime random freeze #421

Closed Denozawr closed 12 years ago

Denozawr commented 13 years ago

I'm using plupload 1.5.1.1 with enabled resize and Flash runtime as primary. When i try to upload multiple files - uploader freeze on random file in queue without any error, warnings on client and server. In log the next file doesn't start uploading (may be freeze on resize level)... Without resize enabled all files uploaded fine. It seems problem occured with flash player 11 installed, with flash player 10 uploads and resize fine. My tests results: IE8 + flash player 10 - fine IE8 + flash player 11 - freeze Firefox + flash player 11 - freeze Firefox + html5 - very fast and fine!

meixger commented 13 years ago

same here

sagaraspl commented 13 years ago

Yes same here, really critical issue. Should be fixed as early as possible.

meixger commented 13 years ago

Apparently Plupload is used in TinyMCE's MCFileManager & MCImageManager: http://www.plupload.com/punbb/viewtopic.php?id=132

But it seems not to be the same version: http://www.tinymce.com/forum/viewtopic.php?id=23322

need to investigate on this ...

MCF commented 13 years ago

Probably related to, or a duplicate of, #411

prpghandi commented 12 years ago

We fixed this issue by changing the exif function to the below.

 public function EXIF():Object {    
            var Exif:Object;

            if (!offsets['exifIFD'] || offsets['exifIFD'] === null) {
                return null;
            }

            Exif = extractTags(offsets['exifIFD'], tags.exif);

            // fix formatting of some tags
            if (Exif.hasOwnProperty('ExifVersion')) {
                trace(Exif.ExifVersion);

                if (Exif.ExifVersion.length == 4){
                Exif.ExifVersion = String.fromCharCode(
                    Exif.ExifVersion[0], 
                    Exif.ExifVersion[1], 
                    Exif.ExifVersion[2], 
                    Exif.ExifVersion[3]
                );
                } else {

                }
            }

            return Exif;     
        }

The lines we added were specifically

trace(Exif.ExifVersion);
if (Exif.ExifVersion.length == 4){

I'm not sure why Exif.ExifVersion would be an array but if it's not an array it is throwing some errors in flash. Can install debug version of flash and flashbug to see this.

Maybe I'm missing something in the code but this fix worked for us.

MCF commented 12 years ago

Any possibility of providing a .swf file that includes your fix? Then others could test as well without having to build it.

Denozawr commented 12 years ago

I join the request of fixed .swf :)

zsoerenm commented 12 years ago

I build a new swf with the replacement above, but it didn't fix the problem! It still stops randomly :(

jayarjo commented 12 years ago

Ok, I'm back now. Expect fixes to this and other things.

prpghandi commented 12 years ago

Here is the swf file. It hasn't been optimized but still works fine for us and also fixed the issues we were having. If anyone want's to post links to photos that aren't working correctly I can test them on our development machines with flashbug and post back any debug errors.

http://www.diverse-tech.net/plupload_ex/plupload.flash.swf

I'm glad this issue will be taken care of.

Denozawr commented 12 years ago

prpghandi: frezze after second image with your version. my settings: var uploader = new plupload.Uploader({ runtimes : 'flash,html4', container: 'container', browse_button : 'pickfiles', max_file_size : '1gb', chunk_size : '1mb', url : 'file/uploadfile.php', resize : {width : 1024, height : 768, quality : 90}, flash_swf_url : '/js/plupload/plupload.flash.swf', filters : [ {title : "Image files", extensions : "jpg,jpeg,gif,png"} ] });

japentaca commented 12 years ago

Tried with a compiled version with the modificacion, and also with the uploaded copy from prpghandi. Same results.

Please Mr prpghandi, would you specify the compilation options ?

jayarjo commented 12 years ago

Hm... first of all I tried to completely disable Exif extraction logic and still was able to repeat a random freeze problem, so it should be something else.

Another thing I noticed that sometimes file dialog doesn't let to select multiple files despite of the enabled multiple selection feature. Also on random.

japentaca commented 12 years ago

The 150 files I use to test have the same EXIF information (taken from the same camera), so I think that the issue is not related to the EXIF parsing function.

Denozawr commented 12 years ago

I think the same, because images by one uploads fine. Problem occures only for queue, maybe some event fires wrong sequence.

jayarjo commented 12 years ago

Now this might sound funny, but once I've installed debug version of the player, I'm not able to repeat the freeze problem anymore... Can anyone try as well?

japentaca commented 12 years ago

Oh my god !. I tried my 150 images on IE8 and all of them uploaded OK.

But the problem persists in Mozilla FF 8.0 and Chrome 15.0.874.121 m.

jayarjo commented 12 years ago

@japentaca, @Denozawr could you also try debug version of the player? I used uninstaller to ensure that versions do not interfere or something.

jayarjo commented 12 years ago

I've temporarily uploaded recompiled plupload.flash.swf here, until I address other issues. Be sure to try it out. After the change I wasn't able to reproduce random freeze problem anymore.

Denozawr commented 12 years ago

Thank you, jayarjo! Your recompiled plupload.flash.swf fixed this issue.

MCF commented 12 years ago

@jayarvo - I've tested your swf file with a 150 upload and a 257 upload, using Flash version 11.1.102.55 (the non-dev version), they both worked fine. In both cases images were being resized then uploaded.

You seem to have fixed the problem, thanks.

jayarjo commented 12 years ago

Thanks for taking time to test this, it was irrational issue :)

meixger commented 12 years ago

@jayarvo - I've tested your swf file successfully with a set of 6 (six) jpg's. the vanilla 1.5.1.1 swf fails always between the 2-5th file.

tested on Chrome 15, FF 8, IE 9 on Win7x64

prpghandi commented 12 years ago

I tried the new swf file with a couple photos that failed on the current swf file and it still failed.

The error message from the debug version of flash player is:

ReferenceError: Error #1069: Property 0 not found on String and there is no default value. at com.mxi.image::ExifParser/EXIF() at MethodInfo-80() at MethodInfo-75() at flash.events::EventDispatcher/dispatchEventFunction() at flash.events::EventDispatcher/dispatchEvent() at com.formatlos::BitmapDataUnlimited/dispatchComplete() at com.formatlos::BitmapDataUnlimited/create() at MethodInfo-77() at com.mxi.image::Image/onBitmapDataReady()

The images I used are at: http://www.diverse-tech.net/plupload_ex/dscn1258_0067.jpg http://www.diverse-tech.net/plupload_ex/dscn1259_0068.jpg

This was tested on Chrome and firefox, latest versions with Flash Player 11, latest version.

Denozawr commented 12 years ago

prpghandi: I tested your files. Fine uploads with flash runtime via IE, Safari, Opera... On chrome and firefox i use html5 runtime, i think it's best choice for them.

In my plupload settings i change order of runtimes dynamically:

var runtimes = 'html5,flash,html4'; if($.browser.webkit || $.browser.msie) runtimes = 'flash,html5,html4'; var uploader = new plupload.Uploader({ runtimes : runtimes, ..................... For IE,Opera, Safari - flash runtime is priority, for firefox, chrome - html5.

jayarjo commented 12 years ago

@prpghandi, thanks I will check.

jayarjo commented 12 years ago

@prpghandi so far, cannot repeat it. I will put additional checks where you've pointed out anyway. Have you tried to purge the cache before loading the modified swf?

Update: Ok, after investigating your jpeg files in more detail I know see that they contain ExifVersion field in non standard form. Were those images post-processed by some app, or is it how they came out of your camera?

prpghandi commented 12 years ago

@jayarjo We have purged the cache. Tried in IE 8 and 9 on Windows XP and 7. Both have Flash Debug player. I also tried in Firefox and get the same error I posted before, in both IE and Firefox.

@Denozawr We have also done this but there should be a way to have this work correctly in Flash.

@MCF Can you send me the 150 photos so we can test here. Still seeing debug error messages about the EXIF data.

prpghandi commented 12 years ago

@jayarjo I am not 100% on this because I did not see the end user do it. They look like they were post-processed somehow. Most people take photos for our app in VGA mode, so 640x480 should be how most of them come but these were 700x500. Let me know if I can help in any other way.

jayarjo commented 12 years ago

@prpghandi, I've updated compiled swf, with a fix, check it out (your proposition was taken into account :).

prpghandi commented 12 years ago

@jayarjo The new swf file works perfectly on our photos. Thank you very mich for the help. I will try and find out how these files were modified if I can get in touch with the end user.