Flex Crossdomain.xml файл и FTP - PullRequest
       16

Flex Crossdomain.xml файл и FTP

1 голос
/ 18 февраля 2010

Как использовать кросс-домен с ftp?

Я пытаюсь выполнить тест FTP на уровне «здравствуй, мир» во Flex, но в течение трех дней я не могу решить проблему с тем, как заставить flex принять мою междоменную политику - даже в целях тестирования. Вот мой код: Точный текст ошибки следует.

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" initialize="onInitialize()" layout="vertical">

<mx:Script>
<![CDATA[
  import mx.utils.*;
  import mx.controls.Alert;
  private var fileRef:FileReference;
  private var fileSize:uint;
  private var fileContents:ByteArray;
  //you need to initiate two scokets one for sending
  //commands and second for sending data to FTP Server
  //socket for sending commands to FTP
  private var s:Socket
  //responce from FTP
  private var ftpResponce:String;
  //socket for sending Data to FTP
  private var dataChannelSocket:Socket;
  //responce from FTP when sending Data to FTP
  private var dataResponce:String;
  //will hold the IP address of new socket created by FTP
  private var dataChannelIP:String;
  //will hold the Port number created by FTP
  private var dataChannelPort:int;
  private var user:String="I have the right user"; //FTP usernae
  private var pass:String="the pw is correct"; //FTP Password

  private function receiveReply(e:ProgressEvent):void {
    ftpResponce=s.readUTFBytes(s.bytesAvailable)
    var serverResponse:Number=Number(ftpResponce.substr(0, 3));
    if (ftpResponce.indexOf('227') > -1) {
      //get the ip from the string response
      var temp:Object=ftpResponce.substring(ftpResponce.indexOf("(") + 1
        , ftpResponce.indexOf(")"));
      var dataChannelSocket_temp:Object=temp.split(",");
      dataChannelIP=dataChannelSocket_temp.slice(0, 4).join(".");
      dataChannelPort=parseInt(dataChannelSocket_temp[4]) * 256 +
        int(dataChannelSocket_temp[5]);
      //create new Data Socket based on dataChannelSocket and dataChannelSocket port
      dataChannelSocket=new Socket(dataChannelIP, dataChannelPort);
      dataChannelSocket.addEventListener(ProgressEvent.SOCKET_DATA, receiveData);
    }
    //few FTP Responce Codes
    switch (String(serverResponse)) {
      case "220":
        //FTP Server ready responce
        break;
      case "331":
        //User name okay, need password
        break;
      case "230":
        //User  logged in
        break;
      case "250":
        //CWD command successful
        break;
      case "227":
        //Entering Passive Mode (h1,h2,h3,h4,p1,p2).
        break;
      default:
    }
    //for more please
    //http://http://www.altools.com/image/support/alftp/ALFTP_35_help/
    //FTP_response_codes_rfc_959_messages.htm          
    traceData(ftpResponce);
  }

  private function receiveData(e:ProgressEvent):void {
    dataResponce=dataChannelSocket.readUTFBytes(
      dataChannelSocket.bytesAvailable);
    traceData("dataChannelSocket_response—>" + dataResponce);
  }

  private function showError(e:IOErrorEvent):void {
    traceData("Error—>" + e.text);
  }

  private function showSecError(e:SecurityErrorEvent):void {
    traceData("SecurityError–>" + e.text);
  }

  private function onInitialize():void {
    Security.loadPolicyFile("http://www.myUrlIsCorrectInMyProgram.com/crossdomain.xml");
  }

  private function createRemoteFile(fileName:String):void {
    if (fileName != null && fileName != "") {
      s.writeUTFBytes("STOR " + fileName + "\n");
      s.flush();
    }
  }

  private function sendData():void {
    fileContents=fileRef.data as ByteArray;
    fileSize=fileRef.size;
    dataChannelSocket.writeBytes(fileContents, 0, fileSize);
    dataChannelSocket.flush();
  }

  //initialize when application load
  private function upLoad():void {
    fileRef=new FileReference();
    //some eventlistener
    fileRef.addEventListener(Event.SELECT, selectEvent);
    fileRef.addEventListener(Event.OPEN, onFileOpen);
    //this function connects to the ftp server
    connect();
    //send the usernae and password
    this.userName(user);
    this.passWord(pass);
    //if you want to change the directory for upload file
    this.changeDirectory("/test/"); //directory name
    //enter into PASSV Mode
    s.writeUTFBytes("PASV\n");
    s.flush();
  }

  private function onFileOpen(event:Event):void {
  }

  private function traceData(event:Object):void {
    var tmp:String="================================\n";
    ta.text+=event.toString() + "\n";
    ta.verticalScrollPosition+=20;
  }

  private function ioErrorEvent(event:IOErrorEvent):void {
    Alert.show("IOError:" + event.text);
  }

  private function selectEvent(event:Event):void {
    btn_upload.enabled=true;
    filename.text=fileRef.name;
    fileRef.load();
  }

  private function uploadFile():void {
    createRemoteFile(fileRef.name);
    sendData();
  }

  private function connect():void {
    s=new Socket("ftp.myUrlIsCorrectInMyProgram.com", 21);
    s.addEventListener(ProgressEvent.SOCKET_DATA, receiveReply);
    s.addEventListener(IOErrorEvent.IO_ERROR, showError);
    s.addEventListener(SecurityErrorEvent.SECURITY_ERROR, showSecError);
    s.addEventListener(Event.CONNECT, onSocketConnect);
    s.addEventListener(Event.CLOSE, onSocketClose);
    s.addEventListener(Event.ACTIVATE, onSocketAtivate);
  }

  private function onSocketConnect(evt:Event):void {
    //traceData("OnSocketConnect–>"+evt.target.toString());
  }

  private function onSocketClose(evt:Event):void {
    //traceData("onSocketClose–>"+evt.target.toString());
  }

  private function onSocketAtivate(evt:Event):void {
    //traceData("onSocketAtivate–>"+evt.target.toString());
  }

  private function userName(str:String):void {
    sendCommand("USER " + str);
  }

  private function passWord(str:String):void {
    sendCommand("PASS " + str);
  }

  private function changeDirectory(str:String):void {
    sendCommand("CWD " + str);
  }

  private function sendCommand(arg:String):void {
    arg+="\n";
    s.writeUTFBytes(arg);
    s.flush();
  }
]]>

[SWF] /FTP-debug/FTP.swf - 739 099 байт после распаковки Предупреждение. Домен www.myUrlIsCorrectInMyProgram.com не определяет метаполитику. Применение метаполитики по умолчанию «только для мастера». Эта конфигурация устарела. См. http://www.adobe.com/go/strict_policy_files, чтобы решить эту проблему.

Предупреждение. Время ожидания для xmlsocket: //ftp.myUrlIsCorrectInMyProgram.com: 843 (3 секунды) в ожидании файла политики сокетов. Это не должно вызывать проблем, но см. http://www.adobe.com/go/strict_policy_files для объяснения.

Предупреждение: [строгое] Игнорирование файла политики на xmlsocket: //ftp.myUrlIsCorrectInMyProgram.com: 21 из-за неправильного синтаксиса. См. http://www.adobe.com/go/strict_policy_files, чтобы решить эту проблему.

* Нарушение безопасности песочницы * Соединение с ftp.myUrlIsCorrectInMyProgram.com:21 разорвано - не разрешено с http://localhost/FTP-debug/FTP.swf Ошибка: запрос ресурса в xmlsocket: //ftp.myUrlIsCorrectInMyProgram.com: 21 запросчиком из http://localhost/FTP-debug/FTP.swf отклонен из-за отсутствия разрешений для файла политики.

«Информация» по указанному выше URL-адресу категорически непонятна для меня.

Пожалуйста, кто-нибудь, помогите!

Ответы [ 3 ]

1 голос
/ 19 июля 2011

У меня тоже была такая же проблема, но я смог ее исправить, используя сервер политики флэш-памяти, который я скачал с http://www.flash -resources.net / download.html . Я запустил это на той же машине, на которой установлен мой сервер Tomcat, и сделал звонок Security.loadPolicyFile ( "XMLSocket: //: 843"); из приложения и все заработало отлично. Нет ошибок.

1 голос
/ 19 июля 2011

У меня тоже была такая же проблема, но я смог ее исправить, используя сервер политики флэш-памяти, который я скачал с здесь . Я запустил это на той же машине, на которой установлен мой сервер Tomcat, и сделал звонок Security.loadPolicyFile ("xmlsocket: // Имя машины: 843"); из приложения и все заработало отлично. Нет ошибок.

Посмотрите на опечатку в поле Имя машины в последнем сообщении.

0 голосов
/ 18 февраля 2010

См. Спецификацию междомена:

http://learn.adobe.com/wiki/download/attachments/64389123/CrossDomain_PolicyFile_Specification.pdf?version=1

Это относится к предупреждению, которое у вас есть, и может помочь вам в этом.

...