我在Flex 4.5中使用FileReference将文件上传到Tibco Web服务器。下面是我几个月前写的用于处理这个问题的flex代码。当时它工作得很好,但现在它似乎不再起作用,我无法弄清楚原因。我非常肯定自从几个月前我写这部分代码以来没有任何改变。当我尝试使用该函数上传文件时,我收到以下错误消息: [IOErrorEvent type =“ioError”bubbles = false cancelable = false eventPhase = 2 text =“错误#2038:文件I / O错误.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请求侦听器。我知道服务器工作正常,因为它托管其他来自同一进程的webservices,它们都可以毫无障碍地响应(包括文件下载服务)。
使用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的跨域问题(这对我来说没有意义,但我尝试了所有相同的事情) 。该文件包含:
如果有人对我可能遇到问题的原因有任何见解,我会很感激。