Показать сообщение отдельно
Старый 02.03.2010, 03:27
Beckie вне форума Посмотреть профиль Отправить личное сообщение для Beckie Найти все сообщения от Beckie
  № 1  
Ответить с цитированием
Beckie

Регистрация: Dec 2009
Сообщений: 5
По умолчанию IO error при загрузке фоток

Собственно проблема следующая.

Если загружаю маленькие фотографии(до 100кб), то загружаются без проблем, если больше 100кб, то уже не грузит и почти под конец загрузки в actionscripted срабатывает
Код AS1/AS2:
fileListener.onIOError = function(file:FileReference):Void
{
	getURL("javascript:io_error();");
}
У меня uploading канал 40kb/sec. На локальном сервере грузятся фотки любого размера.

У друга uploading канал 8mbit/sec, грузятся фотки нормально, даже 3.2mb фотки без IOerror.

Смотрел за процессом загрузки через debuggin proxy прогу, она показывает в момент IOerror, что статус Completed, а Request Header не прилетел вообще.

Но самый прикол в том, что если я ограничиваю свой интернет через Netlimiter до 20kb/sec, то фотки грузятся нормально.


Вот код actionscript:
Код AS1/AS2:
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();");
 
}
Код AS1/AS2:
			<OBJECT classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,115,0" width="100" height="22" id="fileref" align="middle">
				<PARAM name="allowScriptAccess" value="always">
				<PARAM name="swliveconnect" value="true">
				<PARAM name="movie" value="http://www.hosthere.com/fileref.swf?ph=-1&phpsessionid=8mirsjsd75v6vk583vkus50qbb2djsp6&tdomain=www.hosthere.com">
				<PARAM name="wmode" value="opaque">
				<PARAM name="quality" value="high">
				<PARAM name="bgcolor" value="#ffffff">
				<EMBED swliveconnect="true" wmode="opaque" src="http://www.hosthere.com/fileref.swf?ph=-1&phpsessionid=8mirsjsd75v6vk583vkus50qbb2djsp6&tdomain=www.hosthere.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>
			</OBJECT>



Вот что удалось нарыть, это успешный вариант загрузки маленькой фотки через тот proxy debugger:

http://i192.photobucket.com/albums/z228/Somebi/wtf1.gif
http://i192.photobucket.com/albums/z228/Somebi/wtf2.gif
http://i192.photobucket.com/albums/z228/Somebi/wtf3.gif

Шапка 200 прилетает, все ок, загрузка успешная, ссылка вернулась, картинка загрузилась.



Грузим 3.2mb фотку:

http://i192.photobucket.com/albums/z...bi/un-wtf1.gif
http://i192.photobucket.com/albums/z...bi/un-wtf2.gif

Вкладка ответа пустая, ответ не прилетел, естественно шапка тоже.

Вот что удалось залогить в upload.php:


PHP код:
$_SERVER['CONTENT_LENGTH'] -> 54

$_FILES
['Filedata']:

FILE name: [name] [8Undefined indexFiledata
FILE type
: [type] [8Undefined indexFiledata
FILE tmp_name
: [tmp_name] [8Undefined indexFiledata
FILE error
: [error] [8Undefined indexFiledata 
Других ошибок не залогилось.

Что это за мистика такая и как с ней бороться?