4

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

长话短说 - 我正在尝试使用嵌入在 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 将文件上传到经典 ASP 页面,但它可能是 PHP、ASP.net 或其他东西。

当我使用 http://时,一切都在我测试的所有浏览器中运行良好 - IE、Chrome、Firefox、Safari 等。

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

  • 事件.SELECT
  • ProgressEvent.PROGRESS(多次)
  • 事件.完成
  • DataEvent.UPLOAD_COMPLETE_DATA

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

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

  • 事件.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 脚本之前触发了 Flash 错误。

我已经看到有关问题与我网站的 SSL 证书有关的建议。

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

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

  • 相对网址:uploader.asp

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

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

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

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

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

4

0 回答 0