1

我在 Flex 4.5 中使用 FileReference 将文件上传到 Tibco Web 服务器。下面是我几个月前编写的用于处理此问题的弹性代码。当时它工作得很好,但现在它似乎不再工作了,我不知道为什么。我很肯定,自从我几个月前编写代码以来,这部分代码没有任何改变。当我尝试使用该功能上传文件时,我收到以下错误消息: [IOErrorEvent type="ioError" bubbles=false cancelable=false eventPhase=2 text="Error #2038: File I/O Error. 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”,服务器也在 localhost 上运行,在端口 1112 上有一个 http 请求侦听器。我知道服务器工作正常,因为它托管了来自相同的过程,它们都可以顺利响应(包括文件下载服务)。

使用 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 响应,这是有道理的,因为我的 apache 主目录中的 index.html 文件不处理文件上传。但我也可以在 Fiddler2 中看到数据包信息。当我将 url 改回“http://localhost:1112/”时,我再次收到相同类型的错误消息,并且在 Fiddler2 中不再看到数据包事务。

我尝试在http://localhost/crossdomain.xml添加一个 crossdomain.xml 文件,以防万一在尝试提交到端口 1112 时可能存在跨域问题(这对我来说没有意义,但我都试过了)。该文件包含以下内容:

如果有人对我为什么会遇到问题有任何见解,我将不胜感激。

4

0 回答 0