2012-02-14 155 views
1

隨着空氣,我嘗試從遠程服務器加載文件,並使用默認應用程序打開文件。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 

而不是用圖片和文字Word文檔。

+0

嗯。你正在做一個異步打開,但然後試圖寫在下一行。如果你需要進行異步打開,你是不是應該在COMPLETE事件被觸發後才寫字節?或者只是使用同步打開操作。我不知道這是否是問題 - 只是一個觀察。 – merv 2012-02-14 02:56:54

+0

這看起來很像目錄索引,你是正面的,你正在加載的url是正確的嗎?我猜你會錯過最後的實際文件名。 – grapefrukt 2012-02-14 06:55:39

回答

1

低於可能會發生在您下載而不是列出實際文件的目錄的唯一的事情。例如的http://www.myserver.com/files代替http://www.myserver.com/files/myDocument.doc

下載開始前

但是你可以添加該檢查,如果你看一下你的代碼,你會看到

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); 
} 

哦,就像一個過客請注意,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(); 
    } 




}