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

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

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

Регистрация: Jul 2013
Сообщений: 21
Smile Не открывается PNG отправленный на сервер.

Почему когда я BitmapData загоняю в PNGEncoder а затем отправляю на сервер и сохраняю в файл, я этот файл не могу открыть так как он поврежден или слишком велик.
Вот код отправки из флеша:
Код AS3:
var data_bmp:BitmapData = new BitmapData(container.width,container.height);
 
     		    data_bmp.draw(container);
				names.text = "Begin Encode";
        		var png_image_data:ByteArray = PNGEncoder.encode(data_bmp);
				var ld:URLLoader = new URLLoader();
				var url_req:URLRequest = new URLRequest(host);
 
				url_req.method = URLRequestMethod.POST;
				var variables:URLVariables = new URLVariables();
				var base64EncodedImg:String = Base64.encode(String(png_image_data));
				variables.file = base64EncodedImg;
				url_req.data = variables;
				ld.load(url_req);
а вот серверная часть:
PHP код:
<?php
$imageContent 
base64_decode($_POST['file']);
file_put_contents('image.png'$imageContent);
?>
все вроде нормально сохраняет, но почему файл нельзя открыть? С чем это связанно?
Png файл я открывал блокнотом структура вроде нормальная .

Да и еще один момент почему длина переменной png_image_data до кодировки base64 равна 136614, а после раскадировки на сервере равна 194367 wtf? откуда лишние байты?


Последний раз редактировалось scnippers; 06.11.2013 в 21:17.
Старый 07.11.2013, 00:20
Stone вне форума Посмотреть профиль Отправить личное сообщение для Stone Найти все сообщения от Stone
  № 2  
Ответить с цитированием
Stone
 
Аватар для Stone

Регистрация: May 2001
Адрес: Москва
Сообщений: 670
зачем Base64? да и URLVariables

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

Регистрация: Jul 2013
Адрес: Днепр
Сообщений: 529
Отправить сообщение для alexandrratush с помощью ICQ Отправить сообщение для alexandrratush с помощью Skype™
Для сохранения картинки на сервере, я пользуюсь этим:
Код AS3:
package as3lib.net 
{
	import flash.display.DisplayObject;
	import flash.display.Sprite;
	import flash.display.BitmapData;
	import flash.utils.ByteArray;
	import as3lib.images.JPGEncoder;
	import flash.net.NetConnection;
	import flash.events.NetStatusEvent;
	import flash.net.Responder;
	import flash.events.EventDispatcher;
	import flash.events.Event;
 
	public class SavingImage extends EventDispatcher 
	{
 
		private var _netConnection: NetConnection;
 
		private var _encoder: JPGEncoder;
 
		/**
		 * Конструктор
		 * @param	image Изображение
		 * @param	gateWayURL Путь
		 */
		public function SavingImage(image: DisplayObject, gateWayURL: String) 
		{
			var bmd:BitmapData = new BitmapData(image.width, image.height);
				bmd.draw(image);
 
			_encoder = new JPGEncoder(100);
 
			var ba:ByteArray;
				ba = _encoder.encode(bmd);
				ba.compress();
 
			_netConnection = new NetConnection();
			_netConnection.connect(gateWayURL);
			_netConnection.addEventListener(NetStatusEvent.NET_STATUS, statusEvent);
			_netConnection.call('SaveImage/saveImage', new Responder( handleResult, handleError ), ba);
		}
 
		/**
		 * Функция обрабатывает результат, возвращенный от сервера после сохранения изображения  
		 * @param	data
		 */
		private function handleResult(data:Object):void 
		{
			trace(data.status);
			if (data.status == 'save_succeed') 
				dispatchEvent(new Event(Event.COMPLETE));
		}
 
		private function handleError():void 
		{
			trace('error');
		}
 
		private function statusEvent(e:NetStatusEvent):void 
		{
			trace(e.info.details);
		}
	}
}
Серверная часть:
PHP код:
<?php 

class SaveImage 

    public function 
__construct() { 
         
    } 
     
    function 
saveImage($ba) { 
        
$response = array(); 

        
$data $ba->data
         
        if(
function_exists(gzuncompress)) { 
            
$data gzuncompress($data); 
        } else { 
            
trigger_error ("gzuncompress method does not exists, please send uncompressed data"E_USER_ERROR); 
        } 
         
        if ( 
file_put_contents("rawdata.jpeg"$data) ) { 
            
$response['status'] = 'save_succeed'
        } else { 
            
$response['status'] = 'save_error'
        } 
         
        return 
$response
    } 


?>

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

Регистрация: Jul 2013
Сообщений: 21
Проблема решена использовать переменные для передачи файла как то тупо. HTTP_RAW_POST_DATA с помощью этого все заработало.

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

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

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


 


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


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