Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   LocalConnection не передает FileReference! (http://www.flasher.ru/forum/showthread.php?t=120417)

alien54 20.01.2009 13:39

LocalConnection не передает FileReference!
 
Есть 2 флешки, в первой делам select файла, и нужно передать ссылку FileReference во вторую флешку, для организации дальнейшей загрузки.

LocalConnection и через js не проходит, как эту проблему можно решить?
Спасибо

mre 20.01.2009 13:44

Ссылку на экземпляр FileReference нельзя передать.
Как вариант - загрузить файл на сервер и передать ссылку.

etc 20.01.2009 13:45

LocalConnection не передаёт данные такого рода. Только то, что можно сериализовать, FileReference к таким не относится.

Alex Lexcuk 20.01.2009 13:51

Есть 2 флешки, в первой делам select файла, и нужно передать ссылку FileReference во вторую флешку, для организации дальнейшей загрузки.

Можно так

Есть 2 флешки, в первой делам select файла, и передаем уже загруженный файл по LoacalConnection во вторую флешку.

И все будет работать.

etc 20.01.2009 13:56

Цитата:

Сообщение от Alex Lexcuk (Сообщение 792271)
И все будет работать.

Покажите.

alien54 20.01.2009 14:00

вам код или ссылку

Добавлено через 1 минуту
а еще есть какие-то способы передать ссылку?

Alex Lexcuk 20.01.2009 16:15

>>Покажите.

А вот это запросто
Делаем под 10 такой документ класс
Код:

//LoadCompFileDoc
package {
        import flash.display.*;
        import flash.text.*;
        import flash.net.*;
        import flash.events.*;
        import flash.utils.*;

public class LoadCompFileDoc extends Sprite { 
        private var loader:Loader, file:FileReference,txt:TextField,
        sender:ByteArray, i:int,conn:LocalConnection;;
       
        public        function LoadCompFileDoc() {
                txt = new TextField();
                file = new FileReference();
                // file.browse(getTypes());
                file.addEventListener(Event.COMPLETE, onComplete);
                file.addEventListener(Event.SELECT, onSelectFile);
                //onShowloadDialog();
                txt.htmlText = "<a href=\'event:load\'><u>Загрузить файл</a>;"
                txt.autoSize = TextFieldAutoSize.LEFT;
                addChild(txt);//добавить на рабочее поле
                txt.autoSize = TextFieldAutoSize.LEFT;
                addChild(txt);
                txt.addEventListener(TextEvent.LINK, txtLinkFunc);

                sender = new ByteArray();
               
                conn = new LocalConnection();
                conn.addEventListener(StatusEvent.STATUS, onStatus);
        }
       
        private function onStatus(event:StatusEvent):void {
                switch (event.level) {
                        case "status":
                        trace("LocalConnection.send() succeeded");
                        break;
                        case "error":
                trace("LocalConnection.send() failed");
                        break;
                        }
        }
       
        private function txtLinkFunc(evt:TextEvent):void {
                if (evt.text == 'load') onShowloadDialog();
        }

        //отображение диалога открытия файла
        private function onShowloadDialog(event:Event = null):void
        {
                var fileFilter:FileFilter = new FileFilter("Images", "*.jpg");
                try{
                file.browse([fileFilter]);
                }
              // catch(illegalOperation:IllegalOperationError){
                catch(e:Error){
       
                }
        }
       
        //при выборе файла загружаем его
        private function onSelectFile(event:Event):void
        {
                try{
                file.load();
                }
                // catch(illegalOperation:IllegalOperationError)
                catch(e:Error){
                }
        }
       
       
        private function onComplete(event:Event):void
        {
                addChild(loader=new Loader());
                loader.loadBytes(file.data);
                trace(file.data.length);
                for (i=0;i<file.data.length;i++) sender.writeByte(file.data[i]);
                trace(sender.length);
                conn.send("myConnection", "lcHandler", sender);//послать локалл конектион
        }
}
}

Теперь, не долго думая создаем новый fla файл и пишем там в первом кадре
Код:

var conn:LocalConnection,loader:Loader;
conn = new LocalConnection();
conn.client = this;
try {
conn.connect("myConnection");
} catch (error:ArgumentError) {
trace("Can't connect...the connection name is already being used by another SWF");
}
function lcHandler(msg:ByteArray):void {
        trace("Привет");
        trace(msg.length);
        addChild(loader=new Loader());
        loader.loadBytes(msg);
}

Запускаем сначала (ничего там не нажимайте)
http://www.dnadillo.dn.ua/flex/load/LoadCompFileDoc.swf

Теперь это
http://www.dnadillo.dn.ua/flex/load/radio.swf

Теперь когда открыты они оба в первом нажимаем load и выбираем файл на компьютере (это должен быть jpg)
Естестественно можно любой файл передать, но так визуально видно, что он передался.

PS: Файл должен весить меньше 40 кБ, но идея ясна и если надо загружать файл больше 40 килобайт, то надо чуток пошаманить.

etc 20.01.2009 17:06

Цитата:

Сообщение от Alex Lexcuk (Сообщение 792302)
PS: Файл должен весить меньше 40 кБ, но идея ясна и если надо загружать файл больше 40 килобайт, то надо чуток пошаманить.

Ну, по частям, конечно, можно. Только я сомневаюсь, что файлы будут меньше 40 килобайт.

alien54 20.01.2009 19:19

угу, файлы видео, желательно чем больше тем лучше

BlooDHounD 20.01.2009 22:48

alien54, а нафига?


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

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