2014-01-07 1 views
0

Я разрабатываю приложение для Android с помощью Flex и Flash Builder.
Я использовал следующий фрагмент кода для загрузки видео с помощью URLLoader и FileStream.Flex Mobile Missing Загруженный файл

public function download():void{ 
       var loader:URLLoader = new URLLoader(); 
       loader.dataFormat = URLLoaderDataFormat.BINARY; 
       loader.addEventListener(IOErrorEvent.IO_ERROR,function(e:IOErrorEvent):void{ 
        progressLabel.text = "Loader IO Error"; 
       }); 
       loader.addEventListener(Event.COMPLETE,downloadComplete); 
       loader.load(new URLRequest("[MY URL GOES HERE]")); 
       progressLabel.text = "Downloading..."; 
      } 
private function downloadComplete(event:Event):void{ 
       try{ 
        var file:File=File.applicationStorageDirectory.resolvePath("file:///mnt/sdcard/MyVideos"); 

       var ba:ByteArray = event.target.data as ByteArray; 
       var fileStream:FileStream = new FileStream(); 
       fileStream.addEventListener(IOErrorEvent.IO_ERROR,function(e:IOErrorEvent):void{ 
        progressLabel.text = "File IO Error"; 
       }); 
       fileStream.open(file, FileMode.WRITE); 
       fileStream.writeBytes(ba); 
       fileStream.addEventListener(Event.COMPLETE, fileClosed); 
       fileStream.close(); 
       progressLabel.text = "Download Sucessful"; 
      } 
      catch(eeee){ 
       progressLabel.text = "Error"; 
      } 
     } 
     private function fileClosed(event:Event):void { 
      openLabel.text = "File Closed"; 
     } 

При испытании с использованием Motorola Xoom, это показывает, загрузить успешно, но файл не может быть найден в dirctory:
вар файла: Файл = File.applicationStorageDirectory.resolvePath ("Файл: /// мнт/SDCard/MyVideos ");

ответ

2

Использование File.applicationStorageDirectory.resolvePath("MyVideos/video_file.mp4"); вместо File.applicationStorageDirectory.resolvePath("file:///mnt/sdcard/MyVideos"); Due вопроса нарушения безопасности, так разработчик может только получить доступ к ApplicationStorageDirectory без какой-либо риски для безопасности.

Также укажите имя файла MyVideos/video_file.mp4 вместо папки MyVideos.

var file:File=File.applicationStorageDirectory.resolvePath("MyVideos/video_file.mp4"); 

if(file.exists) 
{ 
    trace("file exists"); 
} 

Мол,

private function downloadComplete(event:Event):void 
{ 
    try 
     { 
     var file:File=File.applicationStorageDirectory.resolvePath("MyVideos/video_file.mp4"); 

     var ba:ByteArray = event.target.data as ByteArray; 
     var fileStream:FileStream = new FileStream(); 
     fileStream.addEventListener(IOErrorEvent.IO_ERROR,function(e:IOErrorEvent):void{ 
      progressLabel.text = "File IO Error"; 
     }); 
     fileStream.open(file, FileMode.WRITE); 
     fileStream.writeBytes(ba); 
     fileStream.addEventListener(Event.COMPLETE, fileClosed); 
     fileStream.close(); 
     progressLabel.text = "Download Sucessful"; 
     trace(file.nativePath); //Where file actually stored 
    } 
    catch(eeee){ 
     progressLabel.text = "Error"; 
    } 
} 

При написании больших файлов, таких как видео/музыкальный файл better use ASYNC mode письма/чтения поэтому приложение работает без пользовательского интерфейса замораживания.

+0

Ничего себе. Благодарю. Но есть ли способ сохранить загруженный mp4 на SD-карту? –

+1

Да, для этого вам необходимо изменить файл дескриптора XML-приложения, например после этого вы можете записать на SD-карту подробнее http: // richard-heck .blogspot.in/2011/01/how-to-write-file-to-android-filesystem.html –

+0

Работает как очарование. Большое спасибо. –