Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Не открывается PNG отправленный на сервер. (http://www.flasher.ru/forum/showthread.php?t=204616)

scnippers 06.11.2013 20:51

Не открывается 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? откуда лишние байты?

Stone 07.11.2013 00:20

зачем Base64? да и URLVariables

alexandrratush 07.11.2013 00:41

Для сохранения картинки на сервере, я пользуюсь этим:
Код 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
    } 


?>


scnippers 07.11.2013 18:29

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


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

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