Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Отправка содержимого картинки и сохранение на сервере (http://www.flasher.ru/forum/showthread.php?t=181952)

chiffa 07.07.2012 12:29

Отправка содержимого картинки и сохранение на сервере
 
Всем добрый день. Столкнулся с такой проблемой. Нужно считать содержимое файла картинки, отправить на сервер и там сохранить в файл. делаю так:
Код 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 кб, соответственно не открывается...

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

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

maxkar 07.07.2012 15:19

Цитата:

Локальная картинка весит 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 данные как бинарные, а не как текст.

Astraport 07.07.2012 16:42

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 );



chiffa 07.07.2012 23:22

Спасибо за ответ! Но что то при выводе print_r ($GLOBALS) выдает:

PHP код:

    [_REQUEST] => Array
        (
            [
rnd] => 0.47195919044315815
            
[test] => &#255;Øÿà
        
)



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

Krusty 07.07.2012 23:29

Ну так как же вам бинарные данные выведутся в виде текста?
И преобразование вам нужно делать не binary->string->base64 а просто binary->base64
Примеры реализации есть и для пхп, и для ас3

chiffa 07.07.2012 23:42

То есть во флеше binary->base64 отправил и на пхп base64->binary?

Krusty 07.07.2012 23:43

именно

chiffa 08.07.2012 01:44

Крайне признателен за наставление на истинный путь ) Все заработало! Всем спасибо!

Krusty 08.07.2012 02:29

Ну и на base64 свет клином не сошелся, если что.

LOS2008 08.07.2012 17:56

Вы делаете совершенно ненужное преобразование, удваивающее трафик. В сети полно примеров как передавать в PHP через POST бинарные данные.

Krusty 08.07.2012 19:35

Цитата:

Сообщение от LOS2008 (Сообщение 1087804)
Вы делаете совершенно ненужное преобразование, удваивающее трафик. В сети полно примеров как передавать в PHP через POST бинарные данные.

+30%.
Конкретно base64 необязательно, но в любом случае где-то преобразование все равно сидит, надо примеры гуглить.


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

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