使用Flash、FileReference、HTTPS和错误2038上载文件

使用Flash、FileReference、HTTPS和错误2038上载文件,flash,file-upload,ssl,asp-classic,Flash,File Upload,Ssl,Asp Classic,这个问题似乎已经被广泛讨论,但我找不到解决这个普遍问题的最终办法 长话短说——我正在尝试使用嵌入HTML页面的Flash SWF上传文件 相关代码非常简单和通用: _fileRef = new FileReference(); _fileRef.addEventListener(Event.SELECT, onFileSelected); _fileRef.addEventListener(Event.CANCEL, onFileSelectCancelled); _fileRef.addEve

这个问题似乎已经被广泛讨论,但我找不到解决这个普遍问题的最终办法

长话短说——我正在尝试使用嵌入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);
}
在我的例子中,flashswf将文件上传到一个经典的ASP页面,但它可以是PHP、ASP.net或其他内容

当我使用http://时,在我测试的所有浏览器中,所有东西都能完美工作——比如,Chrome、Firefox、Safari等等

我可以看到调用了以下事件/事件处理程序:

  • Event.SELECT
  • ProgressEvent.PROGRESS(多次)
  • 事件。完成
  • DataEvent.UPLOAD\u完成\u数据
然而,当我使用https://时,该过程在IE8、IE9、IE10和Firefox中失败,但在Chrome和IE11中有效

失败时,将调用以下事件/事件处理程序:

  • Event.SELECT
  • ProgressEvent.PROGRESS(多次)
  • IOErrorEvent.IO_错误
IOErrorEvent.IO_ERROR返回以下错误信息:

"ioErrorHandler: [IOErrorEvent type="ioError" bubbles=false cancelable=false eventPhase=2 text="Error #2038"]"
我相当肯定,问题与接收文件的ASP脚本无关,原因有两个:

  • 当我使用http://
  • 当它失败时,似乎甚至没有调用/执行它。换句话说,如果脚本所做的唯一事情就是编写一个简单的日志文件,那么仍然会出现错误,并且日志文件不会被写入。因此,我猜测Flash错误是在执行ASP脚本之前触发的
我看到一些建议,认为问题与我的站点的SSL证书有关

然而,就我而言,证书似乎在各个方面都是有效的——IE和Firefox都没有抱怨它无效

在SWF中,我尝试将
文件设置为。将
目标URL上载到:

  • 相对URL:
    uploader.asp

  • 没有协议的绝对URL:
    www.mydomain.com/uploader.asp

  • 协议为:
    https://www.mydomain.com/uploader.asp

在最后两种情况下,URL与SSL证书完全匹配,但这并不能解决问题

所以,底线是——在使用https时是否可以使用简单的Flash上传程序

非常感谢您的建议和见解