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

时间:2013-10-22 14:24:21

标签: flash file-upload ssl asp-classic

似乎这个问题已被广泛讨论,但我无法找到解决一般问题的最终解决方案。

长话短说 - 我正在尝试使用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等。

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

  • Event.SELECT
  • ProgressEvent.PROGRESS(多次)
  • Event.COMPLETE
  • DataEvent.UPLOAD_COMPLETE_DATA

但是, 当我使用https:// 时,该过程在IE8,IE9,IE10和Firefox中失败,但在Chrome和IE11中有效。< / p>

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

  • Event.SELECT
  • ProgressEvent.PROGRESS(多次)
  • IOErrorEvent.IO_ERROR

IOErrorEvent.IO_ERROR返回以下错误信息:

"ioErrorHandler: [IOErrorEvent type="ioError" bubbles=false cancelable=false eventPhase=2 text="Error #2038"]"

我很确定该问题与接收该文件的ASP脚本无关,原因有两个:

  • 当我使用 http://
  • 时效果很好
  • 当它失败时,它甚至不会被调用/执行。换句话说,如果脚本所做的唯一事情是编写一个简单的日志文件,我仍然会收到错误,并且不会写入日志文件。所以,我猜测在执行ASP脚本时, BEFORE 会触发Flash错误。

我看到过这个问题与我网站的SSL证书有关的建议。

但是,在我的情况下,证书似乎在各方面都有效 - IE和Firefox都没有抱怨它无效。

在SWF中,我尝试将file.upload目标网址设置为:

  • 相对网址:uploader.asp

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

  • 使用协议的绝对网址:https://www.mydomain.com/uploader.asp

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

那么,底线 - 使用 https 时可以使用简单的Flash上​​传器吗?

非常感谢您的建议和见解!

0 个答案:

没有答案