Flex скачать файл с удаленного сервера - PullRequest
1 голос
/ 14 февраля 2012

С помощью Air я пытаюсь загрузить файл с удаленного сервера и открыть файл с приложением по умолчанию.

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

С этой частью кода файл создается в каталоге документов (как я хочу),но содержимое не является исходным содержимым файла.Для текстового документа новый контент -

Index of /MyApp/LinkMySQL/Customer/Courriers

Name
Last modified
Size
Description


Parent Directory 
    -    

0/ 
13-Feb-2012 20:24   

Вместо текстового документа с изображением и текстом.

Ответы [ 2 ]

1 голос
/ 14 февраля 2012

Единственное, что может произойти, это то, что вы загружаете список каталогов вместо самого файла. например 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 голос
/ 14 февраля 2012

Найти под решением

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




}
...