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

Вернуться   Форум Flasher.ru > Flash > Серверные технологии и Flash

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

Регистрация: Sep 2008
Адрес: Черкассы
Сообщений: 1,167
Записей в блоге: 1
Отправить сообщение для AlexCooper с помощью ICQ Отправить сообщение для AlexCooper с помощью Skype™
По умолчанию AS3 ByteArray -> AMF -> MongoDB

Здравствуйте.
Столкнулся с небольшой проблемой, хочу в базу (Mongo) записать байтарей и потом обратно вытянуть. Но что-то видимо не дочитал. Есть ли опыт у кого-то в подобном?
front-end
Код AS3:
	var lic:Object = new Object();
		lic.emei = emei.text;
		lic.sign = MD5.hash(emei.text);
		lic.desc = desc.text;
 
	var ba:ByteArray = new ByteArray();
		ba.writeObject(lic);
		ba.compress();
 
	var send:Object = new Object();
		send.lic = lic;
		send.ba = ba;
 
	AMF.call('User/licHandler', callbackHandler, send);
back-end
PHP код:
public function licHandler($data) {

        
$data Security::check($data);

// http://chimala.wordpress.com/2007/07/31/flex-20-sending-bytearray-to-amfphp/ 
        
$data['ba'] = new MongoBinData($data['ba']->data);

// пробовал и new MongoBinData($data['ba']) тогда вообще пусто

        
Security::mdb('licence')->insert($data);

        return 
config::responser($data);
    } 
Всё на первый взгляд работает, но при получении обратно ByteArray
PHP код:
 public function getLicenceList($data) {
        
Security::check($data);

        return 
config::responser(Security::mdb('licence')->find());

Код AS3:
private function licenceHandler(data:Object):void {
	trace(data);
 
 
	var byteArray:ByteArray =  data['52494f9c8bbf0eb0b8bd9c0d']['ba']['bin'];
		byteArray.uncompress();
 
	var obj:Object = byteArray.readObject();
 
	for ( var i in obj) {
		trace(i+" >> "+obj[i]);
	}
 
}
ловлю
Код:
TypeError: Error #1034: Type Coercion failed: cannot convert "xÚãâfäLI-Nfc762äLÍMÍdc742æ,ÎLÏcs420JN²43JL6µ4072M’Ì
MRŒŒM’Ì
Çɤ" to flash.utils.ByteArray.
Соответственно где-то я не дочитал.
Подскажите где может быть проблема. Может вытянув из MongoDB нужно "пересобрать" из BinData в ByteArray...
__________________
return this...

Старый 30.09.2013, 15:12
Tails вне форума Посмотреть профиль Отправить личное сообщение для Tails Найти все сообщения от Tails
  № 2  
Ответить с цитированием
Tails
 
Аватар для Tails

блогер
Регистрация: Dec 2008
Адрес: г. Чебоксары
Сообщений: 2,259
Записей в блоге: 6
В базе данных в столбце сохранения какой тип данных указан? Строка наверное? Вы же байты сохраняете, не строку.
__________________
Дети не должны знать о своих родителях

Старый 30.09.2013, 15:41
AlexCooper вне форума Посмотреть профиль Отправить личное сообщение для AlexCooper Найти все сообщения от AlexCooper
  № 3  
Ответить с цитированием
AlexCooper
 
Аватар для AlexCooper

Регистрация: Sep 2008
Адрес: Черкассы
Сообщений: 1,167
Записей в блоге: 1
Отправить сообщение для AlexCooper с помощью ICQ Отправить сообщение для AlexCooper с помощью Skype™
Нажмите на изображение для увеличения
Название: screen8.JPG
Просмотров: 131
Размер:	92.5 Кб
ID:	30038
Mongo Binary Data
Исправьте, если знаете где допустил ошибку.
__________________
return this...

Старый 30.09.2013, 15:43
AlexCooper вне форума Посмотреть профиль Отправить личное сообщение для AlexCooper Найти все сообщения от AlexCooper
  № 4  
Ответить с цитированием
AlexCooper
 
Аватар для AlexCooper

Регистрация: Sep 2008
Адрес: Черкассы
Сообщений: 1,167
Записей в блоге: 1
Отправить сообщение для AlexCooper с помощью ICQ Отправить сообщение для AlexCooper с помощью Skype™
уже думаю кодировать в Base64 чтоли...
__________________
return this...

Старый 30.09.2013, 16:20
AlexCooper вне форума Посмотреть профиль Отправить личное сообщение для AlexCooper Найти все сообщения от AlexCooper
  № 5  
Ответить с цитированием
AlexCooper
 
Аватар для AlexCooper

Регистрация: Sep 2008
Адрес: Черкассы
Сообщений: 1,167
Записей в блоге: 1
Отправить сообщение для AlexCooper с помощью ICQ Отправить сообщение для AlexCooper с помощью Skype™
пока так и оставил костыль с Base64
Код AS3:
	var lic:Object = new Object();
		lic.emei = emei.text;
		lic.sign = MD5.hash(emei.text);
		lic.desc = desc.text;
 
	var ba:ByteArray = new ByteArray();
		ba.writeObject(lic);
		ba.compress();
 
	var send:Object = new Object();
		send.lic = lic;
		send.base64 = Base64.encode(ba);
 
	AMF.call('User/licHandler', callbackHandler, send);
PHP код:
    public function licHandler($data) {

        
$data Security::check($data);

        
Security::mdb('licence')->insert($data);

        return 
config::responser(array(true));
    } 
Нажмите на изображение для увеличения
Название: scrr.JPG
Просмотров: 176
Размер:	17.8 Кб
ID:	30039

Код AS3:
var byteArray:ByteArray = Base64.decode(lic['base64']);
	byteArray.uncompress();
 
	var obj:Object = byteArray.readObject();
 
	for ( var i in obj) {
		trace(i+" >> "+obj[i]);
	}
__________________
return this...

Старый 30.09.2013, 22:37
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 6  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,601
Записей в блоге: 17
1) Запишите объект в ByteArray
2) Запишите его в монго
3) Сразу же считайте с монго
4) Побайтово сверьте с тем, что было в пункте 1.
5) Отпишитесь о результате.

Старый 01.10.2013, 17:24
AlexCooper вне форума Посмотреть профиль Отправить личное сообщение для AlexCooper Найти все сообщения от AlexCooper
  № 7  
Ответить с цитированием
AlexCooper
 
Аватар для AlexCooper

Регистрация: Sep 2008
Адрес: Черкассы
Сообщений: 1,167
Записей в блоге: 1
Отправить сообщение для AlexCooper с помощью ICQ Отправить сообщение для AlexCooper с помощью Skype™
Цитата:
Сообщение от Psycho Tiger Посмотреть сообщение
1) Запишите объект в ByteArray
2) Запишите его в монго
На втором этапе AMF бросает еррор, мол не могу найти строку. Соответственно начал юзать гугл.
Но вот только что нашёл в чем проблема собственно.
Я пытался запихнуть файл (ByteArray) через MongoBinData с типом 0х02 ( БайтАррей ), но в итоге получить обратно ByteArray не получилось и что самое интересное нигде не написали как же получить из бинарных данных обратно байтеррей. Оказалось что есть еще getGridFS, но не факт что это мне поможет. Буду пробывать. Пока стоит костыль с Base64, в принципе удовлетворяет, так как размер записываемого файла не большой и в итоге получаю запись в базе
Цитата:
[lic] => eNoFwTEOgCAMAMCwkFQf4RcopVhHn1JrMQy6wP/j3bIG8Nd73IhZCBMnZOIDYfTni6fXirurKF5KUoSVspkXwpbRWoXbh0WYPmb4AaxVE00=
Добавлено через 3 минуты
UPD:
Цитата:
В базе данных в столбце сохранения какой тип данных указан?
в монго нет типов данных. Она сама определяет тип.

Добавлено через 27 минут
проблема скорей всего заключается именно в записи ByteArray и получения его обратно из MongoDB
__________________
return this...

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

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

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


 


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


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