2010-03-01 4 views
0

Actionscript:erreur IO Flash pendant le téléchargement de photos avec une vitesse d'Internet à faible ajout

System.security.allowDomain("http://" + _root.tdomain + "/"); 
import flash.net.FileReferenceList; 
import flash.net.FileReference; 
import flash.external.ExternalInterface; 
import flash.external.*; 

/* Main variables */ 
var session_photos = _root.ph; 
var how_much_you_can_upload = 0; 

var selected_photos; // container for selected photos 
var inside_photo_num = 0; // for photo in_array selection 
var created_elements = _root.ph; 
var for_js_num = _root.ph; 




/* Functions & settings for javascript<->flash conversation */ 
var methodName:String = "addtoflash"; 
var instance:Object = null; 
var method:Function = addnewphotonumber; 
var wasSuccessful:Boolean = ExternalInterface.addCallback(methodName, instance, method); 
function addnewphotonumber() { 
session_photos--; 
created_elements--; 
for_js_num--; 
} 

/* Javascript hide and show flash button functions */ 
function block(){getURL("Javascript: blocking();");} 
function unblock(){getURL("Javascript:unblocking();");} 

/* Creating HTML platform function */ 
var result = false; 




/* Uploading */ 
function uploadthis(photos:Array) { 

if(!photos[inside_photo_num].upload("http://" + _root.tdomain + "/upload.php?PHPSESSID=" + _root.phpsessionid)) 
{ 
    getURL("Javascript:error_uploading();"); 
} 
} 




/* Flash button(applet) options and bindings */ 
var fileTypes:Array = new Array(); 
var imageTypes:Object = new Object(); 
imageTypes.description = "Images (*.jpg)"; 
imageTypes.extension = "*.jpg;"; 
fileTypes.push(imageTypes); 

var fileListener:Object = new Object(); 
var btnListener:Object = new Object(); 
btnListener.click = function(eventObj:Object) 
{ 
var fileRef:FileReferenceList = new FileReferenceList(); 
fileRef.addListener(fileListener); 
fileRef.browse(fileTypes); 
} 
uploadButton.addEventListener("click", btnListener); 














/* Listeners */ 
fileListener.onSelect = function(fileRefList:FileReferenceList):Void 
{ 
    // reseting values 
    inside_photo_num = 0; 

    var list:Array = fileRefList.fileList; 
    var item:FileReference; 

    // PHP photo counter 
    how_much_you_can_upload = 3 - session_photos; 

    if(list.length > how_much_you_can_upload) 
    { 
    getURL("Javascript:howmuch=" + how_much_you_can_upload + ";list_length=" + list.length + ";limit_reached();"); 
    return; 
    } 

    // if session variable isn't yet refreshed, we check inner counter 
    if(created_elements >= 3) 
    { 
    getURL("Javascript:limit_reached();"); 
    return; 
    } 

selected_photos = list; 

for(var i:Number = 0; i < list.length; i++) 
    { 
    how_much_you_can_upload--; 
    item = list[i]; 
    trace("name: " + item.name); 
    trace(item.addListener(this)); 
    if((item.size/1024) > 5000) {getURL("Javascript:size_limit_reached();");return;} 
    } 

    result = false; 
    setTimeout(block,500); 

    /* Increment number for new HTML container and pass it to javascript, after javascript returns true and we start uploading */ 
    for_js_num++; 
    if(ExternalInterface.call("create_platform",for_js_num)) 
    { 
    uploadthis(selected_photos); 
    } 




} 


fileListener.onProgress = function(file:FileReference, bytesLoaded:Number, bytesTotal:Number):Void 
{ 
getURL("Javascript:files_process(" + bytesLoaded + "," + bytesTotal + "," + for_js_num + ");"); 
} 

fileListener.onComplete = function(file:FileReference, bytesLoaded:Number, bytesTotal:Number):Void 
{ 
inside_photo_num++; 

var sendvar_lv:LoadVars = new LoadVars(); 
var loadvar_lv:LoadVars = new LoadVars(); 
loadvar_lv.onLoad = function(success:Boolean){ 

    if(loadvar_lv.failed == 1) { 
    getURL("Javascript:type_failed();"); 
    return; 
    } 

    getURL("Javascript:filelinks='" + loadvar_lv.json + "';fullname='" + loadvar_lv.fullname + "';completed(" + for_js_num + ");"); 

    created_elements++; 

    if((inside_photo_num + 1) > selected_photos.length) {setTimeout(unblock,1000);return;} // don't create empty containers anymore 
    if(created_elements >= 3) {return;} 

    result = false; 

    /* Increment number for new HTML container and pass it to javascript, after javascript returns true and we start uploading */ 
    for_js_num++; 
    if(ExternalInterface.call("create_platform",for_js_num)) 
    { 
    uploadthis(selected_photos); 
    } 
} 
sendvar_lv.getnum = true; 
sendvar_lv.PHPSESSID = _root.phpsessionid; 
sendvar_lv.sendAndLoad("http://" + _root.tdomain + "/upload.php",loadvar_lv,"POST");  

} 








fileListener.onCancel = function(file:FileReference):Void 
{ 
} 

fileListener.onOpen = function(file:FileReference):Void 
{ 
} 

fileListener.onHTTPError = function(file:FileReference, httpError:Number):Void 
{ 
getURL("Javascript:http_error(" + httpError + ");"); 
} 

fileListener.onSecurityError = function(file:FileReference, errorString:String):Void 
{ 
getURL("Javascript:security_error(" + errorString + ");"); 
} 

fileListener.onIOError = function(file:FileReference):Void 
{ 
getURL("Javascript:io_error();"); 
selected_photos[inside_photo_num].cancel(); 
uploadthis(selected_photos); 
} 

<PARAM name="allowScriptAccess" value="always"> 
<PARAM name="swliveconnect" value="true"> 
<PARAM name="movie" value="http://www.localh.com/fileref.swf?ph=0&phpsessionid=8mirsjsd75v6vk583vkus50qbb2djsp6&tdomain=www.localh.com"> 
<PARAM name="wmode" value="opaque"> 
<PARAM name="quality" value="high"> 
<PARAM name="bgcolor" value="#ffffff"> 
<EMBED swliveconnect="true" wmode="opaque" src="http://www.localh.com/fileref.swf?ph=0&phpsessionid=8mirsjsd75v6vk583vkus50qbb2djsp6&tdomain=www.localh.com" quality="high" bgcolor="#ffffff" width="100" height="22" name="fileref" align="middle" allowScriptAccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"></EMBED> 

Ma vitesse de téléchargement est 40kb/s erreur flash Obtenir lors du téléchargement des photos plus grandes que 500kb et ne pas avoir d'erreur lors du téléchargement de photos de moins de 100-500kb ~.

Mon ami a la vitesse de téléchargement de 8mbit et n'a pas d'erreurs, même lors du téléchargement de photos de 3.2mb et plus.

Comment résoudre ce problème?

J'ai essayé de re-télécharger sur le déclencheur d'erreur d'E/S, mais il s'arrête au même endroit.

Une solution concernant cette erreur? En passant, je regardais le processus via le proxy de débogage et j'ai compris que les en-têtes de responce ne viennent pas du tout sur cette erreur d'E/S.

Et affiche parfois une erreur de socket.

Si nécessaire, je vais également publier le script PHP sur le serveur. Mais cela s'arrête à

if(isset($_FILES['Filedata'])) 
{ 

alors ça ne va pas aider :) car tout le traitement vient après cette vérification.

Répondre

0

En fait, il s'agissait d'un problème de serveur. Il y a quelques semaines, nous avons migré sur VDS avec Ubuntu 10.04 avec Apache et le problème a disparu par lui-même.

Sur le serveur précédent, il y avait un serveur litespeed avec unix si je me souviens bien.

0

Cela ressemble à un problème avec le serveur, pas tellement dans l'actionScript. Essayez de mettre à jour le fichier php.ini pour autoriser des limites de téléchargement plus importantes:
http://www.radinks.com/upload/config.php

+0

Je suis d'accord, cela ressemble à un problème de serveur, mais ne serait-ce pas le max_execution_time plutôt que la limite de téléchargement puisque les téléchargements à grande vitesse fonctionnent? – Les

+0

Le téléchargement s'arrête juste après quelques kilo-octets passés du client, il ne semble pas que c'est parce que max_execution_time a été atteint ou en raison des limites de taille. Et cela n'arrive que pour quelques personnes et moi, pour les autres, ça fonctionne parfaitement. – Somebody

Questions connexes