2010-03-01 81 views
0

的ActionScript:闪存IO错误,而上传照片与低上传网速

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> 

我的上传速度为40KB /秒 获取闪存错误,而上传照片比我的大500kb,上传小于100-500kb的照片时无错误〜。

我的朋友有8mbit上传速度,即使上传3.2mb照片和更多也没有错误。

如何解决这个问题?

我试图重新上传IO错误触发器,但它停在相同的地方。

有关此错误的任何解决方案?

顺便说一下,我正在通过调试代理监视进程,并发现,响应头根本不会出现此IO错误。

有时会显示套接字错误。

如果需要,我也会发布serverside php脚本。但它停在

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

所以它不会帮助:)因为所有处理都是在此检查之后发生的。

回答

0

其实这是一个服务器问题。几个星期前,我们用Ubuntu 10.04和Apache一起开发了VDS,问题本身就消失了。

在以前的服务器上,我记得有litespeed服务器与unix。

0

听起来像服务器的问题,没有太多的动作。尝试更新php.ini以允许更大的上传限制:
http://www.radinks.com/upload/config.php

+0

我同意,这听起来像一个服务器问题,但它不是上传限制,因为高速上传工作的max_execution_time,而不是上传限制? – Les 2010-03-26 10:07:48

+0

上传从客户端传递几千字节后立即停止,听起来不像是因为max_execution_time已达到或因为大小限制。而这种情况只发生在少数人和我身上,其他人则完美地工作。 – Somebody 2010-03-27 12:54:47