2012-01-10 45 views
0

我目前在Flex 3.0中工作我收到一个错误(屏幕截图如下)。我正在使用Flash Player版本10.0在FileReference.save方法中获取错误

当前我正在调用HTTPService,并在该HTTPService的resultHandler中出现了方法filereference.save()中的错误。因为只有在发生MouseEvent或Keyboard事件时才调用此方法。

是否有任何解决方案来克服这种情况,换句话说,在ResultHandler中调用filereference.save方法。

enter image description here

+1

您是否尝试过“手动”调度MouseEvent或KeyboardEvent? – RIAstar 2012-01-10 12:30:07

+0

不,因为我从来没有使用过..如果可能,请你给我这样的代码或URL?您的帮助对我来说是宝贵的。 – 2012-01-10 12:35:51

+1

调度MouseEvent通过代码将不起作用 – OXMO456 2012-01-10 12:45:08

回答

1

你不能。您需要用户的点击按钮才能完成。调度MouseEvent是没有用的。 Romi的方法帮助你。但是您需要出于安全原因才能点击按钮。

我做了什么..是在结果中检索文件位置并打开它像一个HTML页面。然后你可以下载它。除了强迫用户点击Romi所说的按钮之外,我没有看到任何其他解决方案。

var u:URLRequest = new URLRequest(event.result); 
navigateToURL(u, "_blank"); 
+0

嗨我有csv数据作为一个字符串,而不是event.result。该字符串类似于“a,b,c,d,e”。我需要做的是将该字符串保存到名为FullReport.csv的.csv文件中...所以对此有任何想法? – 2012-01-11 04:17:03

+1

如何在服务器中生成文件?而不是返回你的http服务中的所有字符串。只是返回文件的URL /名称来应用我之前说过的。我再次遇到了这个问题,在我的情况下,我必须这样做,文件可能非常大,比如4GB ..不可能通过远程对象或其他东西传输它。你需要用户点击一下,如果你不用,你总会得到那个错误。如果你想使用.save方法,你需要这样使用它。 – 2012-01-11 23:38:44

5

这样做的原因是,你不再允许自动触发文件保存弹出窗口的显示,除了在实际上请求该用户的情况下,通过由用户生成的事件。这里是一些关于这个问题的更多信息:http://www.bogdanmanate.com/2010/05/12/flex-error-2176-when-using-filereference/

我用这个帖子中描述的解决方案解决了这个问题,即通过使用是/否警报来指示用户文件已经完成加载,它是准备下载,最后让他确认他想在本地保存它。你可能会认为用户不友好,但这实际上关乎安全。一旦你知道如何触发事件,你可以找出绕过这个UI问题的方法。

祝您有美好的一天!

0

另一种解决方案可能是将文件发送到服务器,然后让服务器将其发送回客户端,该客户端应触发浏览器的保存/打开对话框。但是,如果文件是由flex创建的,那么这在带宽方面并不理想。