我正在尝试让应用程序上传多个客户端生成的图像(不是文件,因此我不能使用FileReference),同时显示上传的进度。事实证明这比应该的更难。我正在使用Cairngorm Task库对客户端上生成的图像执行以下步骤:
当用户点击一个按钮时,SequenceTask开始运行,编码就像一个魅力,但是当上传任务发生时,它会突然出现错误:
SecurityError:错误#2176:某些操作(例如显示弹出窗口的操作)只能在用户交互时调用,例如通过鼠标单击或按下按钮。
我相信这是因为您无法在没有用户干预的情况下启动URLLoader.load操作。即使用户 点击按钮,我认为因为事情开始异步发生,这个点击事件不再被视为发起人。
有没有办法让URLLoader知道这是鼠标点击的结果?这对于分块上传工作是必不可少的,因为所有后续的块也会启动一个新的URLLoader,所以我不能100%确定参考的分块上传器实际上是有效的。我可能会先尝试只运行普通代码。
感谢任何想法。
答案 0 :(得分:1)
您必须更改应用程序流,以便在上传之前强制用户进行交互。
此行为是在Flash Player 10上引入的(我几乎可以肯定,这不会发生在Flash Player 9上的URLLoaders)和没有办法绕过它,否则它将是一个主要的安全漏洞。调度“假”鼠标事件将不起作用,上传/ POST必须在捕获用户交互(鼠标单击或键盘快捷键)的同一个调用堆栈上完成。
答案 1 :(得分:0)
您可以通过调度MouseEvent
对象来模仿用户操作吗?
我已经尝试通过调用它来完成FileReference.save()
(它不能在没有用户交互的情况下工作),但是它有效,所以也许我的配置有些不同
答案 2 :(得分:0)
我现在遇到的问题与你的问题相同。我有几个图像,只有第一个上传工作像魅力,但在第二次上传,它停止产生以下错误:“SecurityError:错误#2176”,并看着你的帖子我意识到这是由于内部调用第二次上传而不是用户互动。
我尝试了很多选项,然后其中一个选项在开始下一次上传和相同错误之前用close()关闭了URLloader。诀窍在于模仿用户交互。