2

我正在尝试让应用程序上传多个客户端生成的图像(不是文件,因此我不能使用 FileReference),同时显示上传进度。事实证明,这比它应该做的要难得多。我正在使用 Cairngorm 任务库对客户端生成的图像执行以下步骤:

  1. 生成一个绘制舞台区域内容的 BitmapData 对象
  2. 将图像异步编码为 JPEG,以显示进度条(请参阅http://dgrigg.com/blog/2009/03/05/as3-jpegencoder-and-big-images/
  3. 异步上传图片(分块,参见http://soenkerohde.com/2010/01/chunk-file-upload/)以显示进度

当用户点击一个按钮时,SequenceTask 启动,编码就像一个魅力,但是当上传任务发生时,它会因错误而起火:

SecurityError:错误 #2176:某些操作(例如显示弹出窗口的操作)只能在用户交互时调用,例如通过鼠标单击或按钮按下。

我相信这是因为您无法在没有用户干预的情况下启动 URLLoader.load 操作。即使用户点击按钮,我认为因为事情开始异步发生,这个点击事件不再被视为发起者

有没有办法让 URLLoader 知道这是鼠标点击的结果?这对于分块上传的工作来说是必不可少的,因为所有后续块也将启动一个新的 URLLoader,所以我不能 100% 确定来自参考的分块上传器确实有效。我可能会先尝试只运行他们的纯代码。

感谢您的任何想法。

4

3 回答 3

1

您必须更改应用程序流程才能在上传之前强制用户交互。

这种行为是在 Flash Player 10 上引入的(我几乎可以肯定 Flash Player 9 上的 URLLoaders 不会发生这种情况)并且没有办法规避它,否则这将是一个主要的安全漏洞。调度“假”鼠标事件将不起作用,上传/POST 必须在捕获用户交互(鼠标单击或键盘快捷键)的同一调用堆栈上完成。

查看“Flash Player 10 中的用户交互要求”了解更多信息。

于 2011-03-24T00:19:01.610 回答
0

我现在遇到的问题和你的一样。我有几张图片,只有第一次上传像魅力一样工作,但在第二次上传中,它停止出现以下错误:“SecurityError:错误#2176”,看着你的帖子我意识到这是由于内部调用第二次上传而不是用户交互。

我已经尝试了许多选项,其中一个是在开始下一次上传之前使用 close() 关闭 URLloader 并出现相同的错误。诀窍是模拟用户交互。

于 2012-04-06T02:47:43.733 回答
0

你能通过调度一个MouseEvent对象来模仿用户的行为吗?

我已经尝试FileReference.save()通过调用它来完成我的工作(它并不意味着没有用户交互就可以工作),但是它可以工作,所以我的配置可能有些不同

于 2011-03-23T22:49:33.350 回答