2012-02-14 174 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(); 
    } 




}