似乎这个问题已被广泛讨论,但我无法找到解决一般问题的最终解决方案。
长话短说 - 我正在尝试使用HTML页面中嵌入的Flash SWF来上传文件。
相关代码非常直接且通用:
_fileRef = new FileReference();
_fileRef.addEventListener(Event.SELECT, onFileSelected);
_fileRef.addEventListener(Event.CANCEL, onFileSelectCancelled);
_fileRef.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
_fileRef.addEventListener(ProgressEvent.PROGRESS, progressHandler);
_fileRef.addEventListener(Event.COMPLETE, completeHandler);
_fileRef.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA, uploadDataComplete);
private function onFileSelectCancelled(e:Event):void {
// handle the case when the user cancels file selection
}
private function onFileSelected(e:Event):void {
// user has selected the file; upload it
var file:FileReference = FileReference(e.target);
file.upload(_uploadURL, "userfile");
}
private function ioErrorHandler(event:IOErrorEvent):void {
trace("ioErrorHandler: " + event);
}
private function progressHandler(event:ProgressEvent):void {
trace("progressHandler: name=" + file.name + " bytesLoaded=" + event.bytesLoaded + " bytesTotal=" + event.bytesTotal);
}
private function completeHandler(event:Event):void {
trace("completeHandler: " + event);
}
private function uploadDataComplete(event:DataEvent):void {
trace("uploadDataComplete: " + event.data);
}
在我的案例中,Flash SWF将文件上传到Classic ASP页面,但它可能是PHP,ASP.net或其他内容。
当我使用http:// 时,一切都在我测试的所有浏览器中完美运行 - IE,Chrome,Firefox,Safari等。
我可以看到调用以下事件/事件处理程序:
但是, 当我使用https:// 时,该过程在IE8,IE9,IE10和Firefox中失败,但在Chrome和IE11中有效。< / p>
如果失败,将调用以下事件/事件处理程序:
IOErrorEvent.IO_ERROR返回以下错误信息:
"ioErrorHandler: [IOErrorEvent type="ioError" bubbles=false cancelable=false eventPhase=2 text="Error #2038"]"
我很确定该问题与接收该文件的ASP脚本无关,原因有两个:
我看到过这个问题与我网站的SSL证书有关的建议。
但是,在我的情况下,证书似乎在各方面都有效 - IE和Firefox都没有抱怨它无效。
在SWF中,我尝试将file.upload
目标网址设置为:
相对网址:uploader.asp
没有协议的绝对网址:www.mydomain.com/uploader.asp
使用协议的绝对网址:https://www.mydomain.com/uploader.asp
在最后两种情况下,URL完全匹配SSL证书,但这并不能解决问题。
那么,底线 - 使用 https 时可以使用简单的Flash上传器吗?
非常感谢您的建议和见解!