Отправка файла между приложениями AIR с использованием локального подключения
Как отправить текстовый файл между приложениями Air, используя локальное соединение?
Отправитель AIR
частная переменная:LocalConnection;
public function init():void
{
conn=new LocalConnection();
conn.addEventListener(StatusEvent.STATUS,onStatus);
}
private function Sender():void {
var alphabets:File= File.createTempFile();
var file:FileStream = new FileStream();
file.open(alphabets,FileMode.WRITE);
file.writeUTFBytes("Have a nice day");
file.close();
conn.send("app#ReceiverAIR:MyConnection", "lcHandler",t1.text,alphabets);
}
private function onStatus(event:StatusEvent):void {
switch (event.level) {
case "status":
trace("LocalConnection.send() succeeded");
break;
case "error":
trace("LocalConnection.send() failed");
break;
}
}
]]>
</fx:Script>
<mx:TextArea id="t1" />
<mx:Button id="b1" label="Send" click="Sender()" />
Приемник ВОЗДУХА
импорт flash.net.LocalConnection;
import mx.collections.ArrayCollection;
private var conn:LocalConnection;
public function LocalConnectionReceiverExample() {
conn = new LocalConnection();
conn.client = this;
try {
conn.allowDomain('app#SenderAIR');
conn.connect("MyConnection");
} catch (error:ArgumentError) {
trace("Can't connect...the connection name is already being used by another SWF");
}
}
public function lcHandler(msg:String,myfile:File):void {
trace("i am in lcHandler");
t1.text=msg;
}
]]>
</fx:Script>
<mx:TextArea id="t1" editable="false"/>
Это дает следующую ошибку
Error #2044: Unhandled AsyncErrorEvent:. text=Error #2095:
flash.net.LocalConnection was unable to invoke callback lcHandler.
error=TypeError: Error #1034:
Type Coercion failed:
cannot convert Object@83d6791 to flash.filesystem.File.
2 ответа
Решение
Вы не можете отправить файл таким образом... Я наконец-то создал байтовый массив и отправил байтовый массив получателю. Затем я скопировал массив байтов в файл на приемнике.
Отредактировано, чтобы отразить изменения от OP
Спасибо за обновление. Из того, что я понимаю, все объекты, которые вы отправляете через LocalConnection, должны соответствовать следующим условиям:
- Они должны быть сериализуемыми с использованием AMF
- Сериализованные данные не должны превышать 40К
Я предполагаю, что File не является сериализуемым типом.
Вещи, чтобы попробовать:
- Зарегистрируйте псевдоним. Бежать
flash.net.registerClassAlias('FileAlias', File)
с обеих сторон - Отправить более примитивный тип данных. Отправить имя файла или данные файла вместо этого?
Удачи! Брайан