是否可以从AIR应用程序(ActionScript 3)下载和替换xml文件?

时间:2018-01-03 22:12:47

标签: android ios xml actionscript-3 air

我有一个AIR应用程序(AS3),它显示来自本地xml文件的信息。

我想知道是否可以让代码检查互联网上xml文件的版本,看看我的服务器上是否有更新版本的文件。如果是这样,应用程序将下载并替换xml文件。

这样我就不必为了更新xml文件信息而更新所有应用程序。

而且,你知道IOS(或Android)是否可以让用户在不知情的情况下下载和替换xml?

我在考虑这样的事情,但我从来没有尝试过下载文件并替换AS3上的原始文件:

if(myXMLfile.name == data.name_of_xml_Online){
//do nothing
else{
startDownload();
}

function startDownload():void 
    { 
        var request:URLRequest = new URLRequest(); 
        request.url = http://www.mywebsite/xmlfile.xml; 
        fr.download(request); 
}

修改

这就是我的所作所为:

function startDownload():void{
var urlString:String = "http://mywebsite/horaires3.xml";
var urlReq:URLRequest = new URLRequest(urlString);
var urlStream:URLStream = new URLStream();
var fileData:ByteArray = new ByteArray();
urlStream.addEventListener(Event.COMPLETE, loaded);
urlStream.load(urlReq);



function loaded(event:Event):void {
urlStream.readBytes(fileData, 0, urlStream.bytesAvailable);
writeFile();
}



function writeFile():void {
var file:File = File.applicationStorageDirectory.resolvePath("horaires3.xml");
var fileStream:FileStream = new FileStream()
fileStream.open(file, FileMode.WRITE);
    urlRemote_txt.text = file.url;
fileStream.writeBytes(fileData, 0, fileData.length);
fileStream.close();
trace("The AIR file is written.");
}

}

文件已下载,没有错误,但似乎没有替换应用程序的horaires3.xml。

urlRemote_txt.text = app-storage:/horaires3.xml

在我为本地xml文件输入urlLocal_txt.text之前,它是= horaires3.xml

所以似乎有2个不同的“目录”或是因为我在计算机而不是设备上测试它?

请注意,对于原始的horaires3.xml,它通过Adobe Animate中的发布设置包含在我的项目中。

screen capture of the original xml

也许,我必须找到一种方法将我原来的horaires3.xml文件移动到app-storage:/ location ...?

如果有人对此事有所了解。

1 个答案:

答案 0 :(得分:0)

FileReference.download()似乎提示用户,所以我猜你不想要那个。我不知道File.copyTo()是否适用于这样的远程文件。如果没有,您可以尝试使用FileStream,如下所示:

var byteArray:ByteArray = new ByteArray();

var remoteFile:FileStream = new FileStream();
remoteFile.open(pathToRemoteFile, FileMode.READ);
remoteFile.readBytes(byteArray);
remoteFile.close();

var localFile:FileStream = new FileStream();
localFile.open(pathToLocalFile, FileMode.WRITE);
localFile.writeBytes(byteArray);
localFile.close();