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

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

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

Регистрация: Jul 2005
Сообщений: 57
По умолчанию Отправка содержимого картинки и сохранение на сервере

Всем добрый день. Столкнулся с такой проблемой. Нужно считать содержимое файла картинки, отправить на сервер и там сохранить в файл. делаю так:
Код AS3:
 
import mx.graphics.ImageSnapshot;
			import mx.graphics.codec.JPEGEncoder;
 
				private var imageSnapshot:ImageSnapshot
				private function inLargeImage():void
				{
					var jPEGEncoder:JPEGEncoder = new JPEGEncoder(90);
					imageSnapshot = ImageSnapshot.captureImage(load_img,500, jPEGEncoder,true);
 
 
					byteArrayToBitmapData(imageSnapshot.data);
					}
 
				private var loader : Loader = new Loader();
				private function byteArrayToBitmapData(byteArray : ByteArray):void
				{
					loader.contentLoaderInfo.addEventListener(Event.COMPLETE, getBitmapData);
					loader.loadBytes(byteArray);
					}
				private var bitmapData:BitmapData
				private function getBitmapData(e:Event):void {
					var content:* = loader.content;
					bitmapData = new BitmapData(content.width,content.height,true,0x00000000);
 
					var matrix:Matrix = new Matrix();
					bitmapData.draw(content, matrix,null,null,null,true);
					targetImage.source = new Bitmap( bitmapData );
 
					}
 
				private function saveInLargeImage() : void
				{
					if(bitmapData == null)
						{
 
							return;
							}
 
					var encoder:JPEGEncoder = new JPEGEncoder(90);
					var byteArray:ByteArray = encoder.encode(bitmapData);
					var fr : FileReference= new FileReference();
 
 
 
 
 
					base64Eec = new Base64Encoder();
 
					base64Eec.encode(String(byteArray));
					var encodedCredentials:String = base64Eec.toString();
 
					var loader:URLLoader = new URLLoader();
 
					var request:URLRequest=new URLRequest('http://******/wrt.php?rnd=' + Math.random());
					request.method=URLRequestMethod.POST;
 
					var vars:URLVariables = new URLVariables();
					vars['test']=encodedCredentials;
 
 
 
					request.data=vars;
					loader.addEventListener(Event.COMPLETE, onComplete);
					loader.load(request);
 
					function onComplete(event:Event):void {
						trace (loader.data);
 
					}
 
 
 
 
					}

и на стороне сервера:
PHP код:

$fp 
fopen("log/upl.jpg""a+");
 
$test fwrite($fp,  base64_decode($txt_in));
 if (
$test) echo '';
 else echo 
'error';
 
fclose($fp); 
Локальная картинка весит 859 кб, а на стороне сервера, после сохранения, почему то только 205 кб, соответственно не открывается...

Кто знает, подскажите: что делаю не так? Почему файл не передается полный объемом?...

Заранее спасибо!

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

Регистрация: Nov 2010
Сообщений: 497
Цитата:
Локальная картинка весит 859 кб,
Что именно в вашем понимании "локальная картинка"? Что такое локальная картинка в коде и где вы выводите ее размер? Если вы картинку с диска берете, то потом вы ее же и перекодируете, так что размер может измениться.
Цитата:
соответственно не открывается...
Ну да, естественно. Вы же данные теряете. Вот что по вашему должна делать строчка:
Код AS3:
String(byteArray)
?
Бинарные данные в строку вооще-то неоднозначно преобразуются. После вашего ответа на предыдущий вопрос выполните и прокомментируйте следующий пример:
Код AS3:
        const ba:ByteArray = new ByteArray();
        for (var i:int = 0; i < 65536; i++)
            ba.writeShort(i);
        trace(ba.length);
        ba.position = 0;
        const cs:String = String(ba);
        trace(cs.length);
        var ptr:int = 0;
        for (i = 0; i < 65536; i++) {
            if ((cs.charCodeAt(ptr) << 8 | cs.charCodeAt(ptr + 1)) != i)
                trace(i + " " + cs.charCodeAt(ptr) + " " +
                        cs.charCodeAt(ptr + 1));
            ptr += 2;
        }
Ну и еще я не уверен, что вы пишете (и раскодируете) в php данные как бинарные, а не как текст.

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

блогер
Регистрация: Sep 2009
Сообщений: 2,463
Записей в блоге: 2
base64Eec.encode и т. п. ничего этого не нужно. Отправляете ByteArray, а в PHP:

PHP код:
if ( isset ( $GLOBALS["HTTP_RAW_POST_DATA"] )) {
    
$filename $name.".jpg";
    
$fp fopen$upload_dir.$filename,"wb");
    
fwrite$fp$GLOBALS'HTTP_RAW_POST_DATA' ] );
    
fclose$fp );

__________________
In Code We Trust

Старый 07.07.2012, 23:22
chiffa вне форума Посмотреть профиль Отправить личное сообщение для chiffa Найти все сообщения от chiffa
  № 4  
Ответить с цитированием
chiffa

Регистрация: Jul 2005
Сообщений: 57
Спасибо за ответ! Но что то при выводе print_r ($GLOBALS) выдает:

PHP код:
    [_REQUEST] => Array
        (
            [
rnd] => 0.47195919044315815
            
[test] => &#255;Øÿà
        
)


и все... в файл ничего не записывается...

Старый 07.07.2012, 23:29
Krusty вне форума Посмотреть профиль Отправить личное сообщение для Krusty Найти все сообщения от Krusty
  № 5  
Ответить с цитированием
Krusty

Регистрация: Jul 2007
Сообщений: 393
Ну так как же вам бинарные данные выведутся в виде текста?
И преобразование вам нужно делать не binary->string->base64 а просто binary->base64
Примеры реализации есть и для пхп, и для ас3

Старый 07.07.2012, 23:42
chiffa вне форума Посмотреть профиль Отправить личное сообщение для chiffa Найти все сообщения от chiffa
  № 6  
Ответить с цитированием
chiffa

Регистрация: Jul 2005
Сообщений: 57
То есть во флеше binary->base64 отправил и на пхп base64->binary?

Старый 07.07.2012, 23:43
Krusty вне форума Посмотреть профиль Отправить личное сообщение для Krusty Найти все сообщения от Krusty
  № 7  
Ответить с цитированием
Krusty

Регистрация: Jul 2007
Сообщений: 393
именно

Старый 08.07.2012, 01:44
chiffa вне форума Посмотреть профиль Отправить личное сообщение для chiffa Найти все сообщения от chiffa
  № 8  
Ответить с цитированием
chiffa

Регистрация: Jul 2005
Сообщений: 57
Крайне признателен за наставление на истинный путь ) Все заработало! Всем спасибо!

Старый 08.07.2012, 02:29
Krusty вне форума Посмотреть профиль Отправить личное сообщение для Krusty Найти все сообщения от Krusty
  № 9  
Ответить с цитированием
Krusty

Регистрация: Jul 2007
Сообщений: 393
Ну и на base64 свет клином не сошелся, если что.

Старый 08.07.2012, 17:56
LOS2008 вне форума Посмотреть профиль Отправить личное сообщение для LOS2008 Найти все сообщения от LOS2008
  № 10  
Ответить с цитированием
LOS2008

Регистрация: Aug 2008
Сообщений: 27
Вы делаете совершенно ненужное преобразование, удваивающее трафик. В сети полно примеров как передавать в PHP через POST бинарные данные.

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

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

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


 


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


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