Загрузка файла с помощью Flex 4.5 FileReference IOError # 2038 - PullRequest
1 голос
/ 13 января 2012

Я использую FileReference во Flex 4.5 для загрузки файлов на веб-сервер Tibco.Ниже приведен гибкий код, который я написал несколько месяцев назад, чтобы справиться с этим.В то время это работало просто отлично, но теперь, похоже, больше не работает, и я не могу понять, почему.Я уверен, что с этой частью кода ничего не изменилось с тех пор, как я написал ее несколько месяцев назад.Когда я пытаюсь использовать функцию для загрузки файла, я получаю следующее сообщение об ошибке: [IOErrorEvent type = "ioError" bubbles = false cancellable = false eventPhase = 2 text = "Ошибка # 2038: Ошибка ввода-вывода файла. URL: http://localhost:1112/CCWS/uploadFile?changeID=1325863504338&fileName=out%2Etxt"]

public function uploadFile():void
{

    var fr:FileReference = new FileReference();

    fr.addEventListener(IOErrorEvent.IO_ERROR,function(event:IOErrorEvent):void{
        Alert.show(event.toString());
    });

    fr.addEventListener(Event.SELECT, function (event:Event):void{

        var uploadURL:URLRequest = new URLRequest(url + "/CCWS/uploadFile" );
        var params:URLVariables = new URLVariables();
        params.fileName = fr.name;
        params.changeID = requestIDText.text;
        uploadURL.data = params;

        fr.upload(uploadURL,"fileContent");

    });

    fr.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA, function (event:DataEvent):void{
        var obj:ObjectProxy = new ObjectProxy();
        obj.fileName = fr.name;
        obj.fileID = event.data;

        filesDataProvider.addItem(obj);
    });
    fr.browse();
}

В этом случае для URL был задан "http://localhost:1112", и сервер также работал на локальном хосте с прослушивателем http-запросов на порту 1112. Я знаю, что сервер работает нормально, потому чтона нем размещаются другие веб-сервисы из того же процесса, и все они отвечают без помех (включая службу загрузки файлов).

Используя Fiddler2 для мониторинга трафика пакетов, я определил, что Flex никогда не отправлял запрос на сервер.Я упростил свой код до этого, чтобы посмотреть, смогу ли я найти, что происходит: public function uploadFile (): void {var fr: FileReference = new FileReference ();

    fr.addEventListener(IOErrorEvent.IO_ERROR,function(event:IOErrorEvent):void{
        Alert.show(event.toString());
    });

    fr.addEventListener(Event.SELECT, function (event:Event):void{

        var uploadURL:URLRequest = new URLRequest("http://localhost:1112/" );
        var params:URLVariables = new URLVariables();
        params.fileName = fr.name;
        params.changeID = "1325863504338";
        uploadURL.data = params;

        fr.upload(uploadURL,"fileContent");
    });

    fr.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA, function (event:DataEvent):void{
        var obj:ObjectProxy = new ObjectProxy();
        obj.fileName = fr.name;
        obj.fileID = event.data;
        Alert.show(obj.fileName,obj.fileID);
        filesDataProvider.addItem(obj);
    });
    fr.browse();
}

Когда я пытаюсь загрузитьfile to "http://localhost/" Я получаю ответ HTTP 500, что имеет смысл, поскольку файл index.html в моем домашнем каталоге apache не обрабатывает загрузку файла. Но я также вижу информацию о пакете, отображаемую в Fiddler2. Когда яизмените URL на "http://localhost:1112/" Я снова получаю сообщение об ошибке того же типа и больше не вижу транзакцию пакета в Fiddler2.

Я попытался добавить файл crossdomain.xml в http://localhost/crossdomain.xml простов случае, если может возникнуть проблема с междоменными доменами при попытке отправки на порт 1112 (что не имеет смысла для меня, но я все равно попробовал).Файл содержал это:

Если у кого-то есть понимание того, почему у меня могут быть проблемы, я был бы признателен.

...