Загрузка файла с помощью Flex 4.5 FileReference IOError #2038
Я использую 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();
}
Когда я пытаюсь загрузить файл в "http://localhost/", я получаю ответ HTTP 500, что имеет смысл, поскольку файл index.html в моем домашнем каталоге apache не обрабатывает загрузку файла. Но я также вижу информацию о пакете, отображаемую в Fiddler2. Когда я изменяю URL обратно на "http://localhost:1112/", я снова получаю сообщение об ошибке того же типа и больше не вижу транзакцию пакета в Fiddler2.
Я попытался добавить файл crossdomain.xml по адресу http://localhost/crossdomain.xml на тот случай, если может возникнуть проблема с междоменами при попытке отправки на порт 1112 (что не имеет смысла для меня, но я все равно попробовал). Файл содержал это:
Если у кого-то есть понимание того, почему у меня могут быть проблемы, я буду признателен.