Hi,
I had some problems with my SSL (GeoTrust).
On some browsers (mostly FF3.6 on WinXP), uploading a file using flash over SSL gives me an IOError.
Something I found out is that uploading without SSL works even the site is on SSL.
I thought about trying to upload with SSL (https://) and if it fails, retry without SSL ([URL=“http://%29”]http://).
The problem is that when I retry uploading without SSL the UPLOAD_COMPLETE_DATA won’t trigger.
Tried removing and adding all the events, adding a cancel before retrying but it didn’t work…
Here’s the code:
btUpload.addEventListener(MouseEvent.CLICK, btUpload_CLICK);
function btUpload_CLICK(event:MouseEvent):void{
uploadFile = new FileReference();
uploadFile.addEventListener(Event.SELECT, fileSelected);
uploadFile.addEventListener(Event.CANCEL, selectionCanceled);
uploadFile.browse(new Array(new FileFilter("Document (*.doc,*.xls,*.ppt,*.txt)","*.doc;*.xls;*.ppt;*.txt")));
}
function fileSelected(event:Event):void{
uploadFile.removeEventListener(Event.SELECT, fileSelected);
uploadFile.removeEventListener(Event.CANCEL, selectionCanceled);
var URLVar:URLVariables = new URLVariables();
URLVar.id = id;
URLVar.MAX_FILE_SIZE = "52428800";
var URLReq:URLRequest = new URLRequest("https://www.server.com/uploadfile.php");
URLReq.method = URLRequestMethod.POST;
URLReq.data = URLVar;
URLReq.requestHeaders;
uploadFile.addEventListener(ProgressEvent.PROGRESS , fileProgress);
uploadFile.addEventListener(Event.COMPLETE, fileUploaded);
uploadFile.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA, fileUploadComplete);
uploadFile.addEventListener(IOErrorEvent.IO_ERROR, fileUploadIOError);
uploadFile.addEventListener(SecurityErrorEvent.SECURITY_ERROR, fileUploadSecurityError);
uploadFile.upload(URLReq);
function fileProgress(event:ProgressEvent):void{
trace(event.bytesLoaded + " of " + event.bytesTotal + " bytes uploaded");
}
function fileUploaded(event:Event):void{
uploadFile.removeEventListener(Event.COMPLETE, fileUploaded);
trace("Uploaded");
}
function fileUploadComplete(event:DataEvent):void{
uploadFile.removeEventListener(ProgressEvent.PROGRESS , fileProgress);
uploadFile.removeEventListener(DataEvent.UPLOAD_COMPLETE_DATA, fileUploadComplete);
uploadFile.removeEventListener(IOErrorEvent.IO_ERROR, fileUploadIOError);
uploadFile.removeEventListener(SecurityErrorEvent.SECURITY_ERROR, fileUploadSecurityError);
if(event.data == "1"){
trace("Upload is ok");
}else{
trace("Upload error");
}
}
function fileUploadIOError(event:IOErrorEvent):void{
if(URLReq.url.search("https://")==0){//Error Using SSL
trace("retry upload with no ssl");
URLReq.url = "http://www.server.com/uploadfile.php";
uploadFile.upload(URLReq);
}else{
uploadFile.removeEventListener(ProgressEvent.PROGRESS , fileProgress);
uploadFile.removeEventListener(DataEvent.UPLOAD_COMPLETE_DATA, fileUploadComplete);
uploadFile.removeEventListener(IOErrorEvent.IO_ERROR, fileUploadIOError);
uploadFile.removeEventListener(SecurityErrorEvent.SECURITY_ERROR, fileUploadSecurityError);
trace("IOError on upload");
}
}
function fileUploadSecurityError(event:SecurityErrorEvent):void{
uploadFile.removeEventListener(ProgressEvent.PROGRESS , fileProgress);
uploadFile.removeEventListener(DataEvent.UPLOAD_COMPLETE_DATA, fileUploadComplete);
uploadFile.removeEventListener(IOErrorEvent.IO_ERROR, fileUploadIOError);
uploadFile.removeEventListener(SecurityErrorEvent.SECURITY_ERROR, fileUploadSecurityError);
trace("Upload Security Error (0015)");
}
}
function selectionCanceled(event:Event):void{
uploadFile.removeEventListener(Event.SELECT, fileSelected);
uploadFile.removeEventListener(Event.CANCEL, selectionCanceled);
}
Any idea for a work around?
Thanks.