我正在使用此帖子链接中的代码将远程 SWF 文件下载到磁盘。
我有一个列出 3 个 SWF 文件的 XML 文件,并且我使用 for each 循环来遍历它们。跟踪名称,显示所有 3 个唯一文件名。
在 for each 循环中使用文件下载代码时,仅保存列表中的最后一个文件。
我的确切代码:
function onPlaylistComplete(e:Event)
{
var List:XML = new XML(e.target.data);
trace("List : " + List);
for each(var item in List.playlist_ads.ad.ad_file_path)
{
var urlString:String = site_url + "/" + item;
var urlReq:URLRequest = new URLRequest(urlString);
var urlStream:URLStream = new URLStream();
urlStream.addEventListener(Event.COMPLETE, loaded);
urlStream.load(urlReq);
function loaded(event:Event):void
{
var fileData:ByteArray = new ByteArray();
urlStream.readBytes(fileData, 0, urlStream.bytesAvailable);
writeBinaryFile(item, fileData);
}
}
}
function writeBinaryFile(name : String, array : ByteArray) : void {
try {
var f : File = File.documentsDirectory.resolvePath(name);
var fs : FileStream = new FileStream();
fs.open(f, FileMode.WRITE);
fs.writeBytes(array);
fs.close();
trace(f.nativePath + " written.");
}
catch (err : Error) {
trace(err.name);
}
}
我在想字节数组没有被清除,或者我需要为每个文件使用一个字节数组?
希望你能帮忙。
更新 - 我尝试了以下代码,将完成事件处理程序从循环中取出,仍然有同样的问题,并且正在使用最后一个文件名。在过去的几个小时里一直在尝试各种各样的事情!
for(i = 0; i < adArray.length; i++)
{
var swfItem = adArray[i];
var urlString:String = site_url + "/" + adArray[i];
var urlReq:URLRequest = new URLRequest(urlString);
var urlStream:URLStream = new URLStream();
urlStream.addEventListener(Event.COMPLETE, urlStreamComplete);
urlStream.load(urlReq);
}
function urlStreamComplete(event:Event):void
{
var fileData:ByteArray = new ByteArray();
var stream = event.target;
stream.readBytes(fileData, 0, stream.bytesAvailable);
try {
var f : File = File.documentsDirectory.resolvePath(swfItem);
var fs : FileStream = new FileStream();
fs.open(f, FileMode.WRITE);
fs.writeBytes(fileData);
fs.close();
trace(f.nativePath + " written.");
}
catch (err : Error) {
trace(err.message);
}
}