0
我正在使用此帖子中的代碼link here將遠程SWF文件下載到磁盤。循環播放文件列表並下載 - 僅保存最後一個文件
我有一個列出3個SWF文件的XML文件,我使用每個循環來通過它們。追蹤名稱,顯示所有3個獨特的文件名。
在每個循環中使用文件下載代碼時,只保存列表中最後一個文件。
我的確切代碼:
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);
}
}
我在想,不知何故字節組沒有被清理掉,或者我需要使用每個文件的ByteArray?
希望你能幫上忙。
更新 - 我試了下面的代碼,使完成事件處理程序不在循環中,仍然有相同的問題,並使用最後一個文件名。在過去的幾個小時裏一直在嘗試各種各樣的事情!
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);
}
}
你能提供一些代碼來展示你的意思嗎?我不太熟悉AS3,我很害怕! –