2012-02-14 9 views
1

Airを使用して、リモートサーバーからファイルを読み込み、既定のアプリケーションでファイルを開こうとします。Flexはリモートサーバーからファイルをダウンロードします

private function getRemoteCourr(PathFichier:String, FileName:String):void { 
    urlStream = new URLStream(); 
    fileData = new ByteArray(); 
    var urlRemoteCourr:String = new urlManager().urlCourriersPat(); 

    var PathFichierGlob: String = urlRemoteCourr+PathFichier; 
    var urlReq:URLRequest = new URLRequest(urlRemoteCourr); 
    urlStream.addEventListener(Event.COMPLETE, function(e:*):void {fileLoaded(e,FileName)}); 
    urlStream.load(urlReq); 
} 

private function fileLoaded(event:Event, PathFichier:String):void { 
    urlStream.readBytes(fileData, 0, urlStream.bytesAvailable); 
    var file:File = File.documentsDirectory.resolvePath(PathFichier); 
    var fileStream:FileStream = new FileStream(); 
    fileStream.openAsync(file, FileMode.WRITE); 
    fileStream.writeBytes(fileData, 0, fileData.length); 
    fileStream.close(); 

    file.openWithDefaultApplication(); 
} 

このコード部分では、ファイルがドキュメントディレクトリに作成されていますが、その内容は元のファイルコンテンツではありません。 Word文書の場合は、新しいコンテンツが

Index of /MyApp/LinkMySQL/Customer/Courriers 

Name 
Last modified 
Size 
Description 


Parent Directory 
    -  

0/ 
13-Feb-2012 20:24 

の代わりに画像やテキストをワード文書です。

+0

Umm。非同期でオープンしていますが、次の行に書き込もうとしています。非同期オープンを行う必要がある場合は、COMPLETEイベントが発生した後にのみバイトを書き込むべきではありませんか?代わりに、同期オープン操作を使用してください。それが問題なのかどうかはわかりません。ただの観察です。 – merv

+0

確かにディレクトリインデックスのように見えますが、あなたがロードしているURLが正しかったですか?私はあなたが最後に実際のファイル名が不足していると思います。 – grapefrukt

答えて

1

の下に検索起きてできる唯一の事は、あなたが実際のファイルの代わりにディレクトリの一覧をダウンロードしているです。例えばhttp://www.myserver.com/files代わりにあなたが

ただし、ダウンロードを開始する前に、あなたはあなたのコードを見れば、あなたは

private function getRemoteCourr(PathFichier:String, FileName:String):void { 
    urlStream = new URLStream(); 
    fileData = new ByteArray(); 
    var urlRemoteCourr:String = new urlManager().urlCourriersPat(); 

    var PathFichierGlob: String = urlRemoteCourr+PathFichier; 
    //var urlReq:URLRequest = new URLRequest(urlRemoteCourr); 
    //!!!!REQUESTING ONLY urlRemoteCourr 
    //INSTEAD DO THIS: 
    var urlReq:URLRequest = new URLRequest(PathFichierGlob); 
    urlStream.addEventListener(Event.COMPLETE, function(e:*):void {fileLoaded(e,FileName)}); 
    urlStream.load(urlReq); 
} 

ああを見て、ちょうど合格となり、そのためのチェックを追加することができ

http://www.myserver.com/files/myDocument.docのAS3の変数名は大文字で始まらないことに注意してください。クラス名はそうです。それが大会です。

1

ソリューション

public class fMoveCopy 
{ 

    private var urlStream:URLStream; 
    private var fileData:ByteArray = new ByteArray(); 
    private var fileName:String; 
    private var fileLocal:File; 

    public function fMoveCopy() 
    { 
    } 


    public function getFileRemote(pathRemote:String, fileNameR:String):void 
    { 
     urlStream = new URLStream(); 
     var urlReq:URLRequest = new URLRequest(pathRemote); 
     urlStream.addEventListener(Event.COMPLETE, loaded); 
     urlStream.load (urlReq); 
     fileName = fileNameR; 
    } 

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

    private function resolveFile(pathLocal:String):void 
    { 
     fileLocal = File.applicationStorageDirectory.resolvePath(pathLocal); 
     var fileStream:FileStream = new FileStream(); 
     fileStream.addEventListener(Event.CLOSE, fileClosed); 
     fileStream.openAsync(fileLocal, FileMode.WRITE); 
     fileStream.writeBytes(fileData, 0, fileData.length); 
     fileStream.close(); 
    } 

    private function fileClosed(event:Event):void 
    { 

     fileLocal.openWithDefaultApplication(); 
    } 




} 
関連する問題