Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 08.02.2008, 14:14
utyf вне форума Посмотреть профиль Отправить личное сообщение для utyf Найти все сообщения от utyf
  № 1  
Ответить с цитированием
utyf

Регистрация: Nov 2007
Сообщений: 11
По умолчанию amfphp и bytearray

Добрый день. Такая проблема:
Код сервиса на пхп (используется amfphp 1.9):

PHP код:
class GetActors
{
    public function 
get()
    {
        return new 
ByteArray(file_get_contents("../../images/1/22.jpg"));
    }

Код на ас3:
Код:
package {
	import flash.display.Loader;	
	import flash.net.NetConnection;	
	import flash.net.Responder;	
	import flash.utils.ByteArray;	
	import flash.display.Sprite;	
	
	
	/**
	 * @author utyf
	 */
	public class Test extends Sprite {
		private var responder : Responder;
		private var conn : NetConnection;

		public function Test() {
			responder = new Responder(onFinish, onError);
			conn = new NetConnection();
			conn.connect("http://localhost/remoting/gateway.php");
			sendData();
		}
		
		private function onError(result : Object) : void {
		}

		private function onFinish(result : *) : void {
			trace('finish');
			trace(result);
			trace(result as ByteArray);
			
			
		
			var loader : Loader = new Loader();
			
			//loader.loadBytes(result);
			addChild(loader);
		}

		private function sendData() : void {
			conn.call("GetActors.get", responder);
		}
		
		
		
	}
}
трейс выдает:

Код:
[trace] finish
[trace] [object Object]
[trace] null

loader.loadBytes(result) не выполняется, пишет, что не может привести этот объект к ByteArray.

Вопрос: как мне получить байтаррай?


Последний раз редактировалось utyf; 08.02.2008 в 14:17.
Старый 10.02.2008, 11:31
utyf вне форума Посмотреть профиль Отправить личное сообщение для utyf Найти все сообщения от utyf
  № 2  
Ответить с цитированием
utyf

Регистрация: Nov 2007
Сообщений: 11
Как я понимаю, никто не рискнул попробовать описанное выше
После некторого времени выяснилось как эту проблему обходить (как я понимаю это некоторый баг флеша):

1. Изучение показало, что от амфпхп приходит не просто объект, а объект,содержащий поле data, то есть то,что приходило бы, если пересылать ByteArray с помощью amf0.

2. При посылке запроса в теле запроса содержится некая информация о том в каком формате должен прийти ответ (amf0 или amf3). Документация говорит, что это регулируется свойством onjectEncoding. Устанавливаю явно
Код:
conn.objectEncoding = ObjectEncoding.AMF3
но все остается по прежнему, amf3 не используется.

3.Попробовал сделать то же самое флексовым RemoteObject, оказалось что с ним все работает, приходит БайтАррай...

4. Поэкспериментировав и просмотрев промежуточный код (который из мхмл получается), выяснил, что если передавать с запросом какой нибудт сложный объект, то тогда(и только тогда) запрашиваются данные в amf3. То есть:
Код:
conn.call("GetActors.get", responder);
приходят данные в амф0

Код:
conn.call("GetActors.get", responder, (new Object));
приходят данные в амф3 и все хорошо.

а objectEncoding на это не влияет.

Старый 13.02.2008, 12:07
terbooter вне форума Посмотреть профиль Отправить личное сообщение для terbooter Найти все сообщения от terbooter
  № 3  
Ответить с цитированием
terbooter

Регистрация: Oct 2006
Адрес: Novosibirsk-Kaliningrad
Сообщений: 1,278
Отправить сообщение для terbooter с помощью ICQ Отправить сообщение для terbooter с помощью Skype™
Вопрос только, зачем вам это нужно?
amfphp умеет архивировать ByteArray?
Если нет то, размер пересылаемых данных довольно большой.
Насколько я понял вы хотите передать byteArray картинки.
Я делал подобные эксперименты с FMS, картинка (в jpg 4кб) в побитовом варианте 150кбайт посое применения ByteArray.compress() около 4кб
Разница в 30 раз!

Создать новую тему Ответ Часовой пояс GMT +4, время: 16:31.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 16:31.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.