Update:
正如下面 Jacob 的回复中所讨论的,限制或纠正 FileReference.save 的行为是不可能的。谁能建议一个替代方案(服务器是 Apache/PHP),它符合我在这篇文章中的所有标准,并避免我与 Jacob 讨论的陷阱?
End edit
我正在使用 FileReference.save() 从 AS3 应用程序保存图像。这是代码,运行良好:
var encoder:JPGEncoder = new JPGEncoder(80);
var byteData = encoder.encode(myBMD); //bitmap data object created earlier
var file:FileReference = new FileReference();
file.save(byteData, "myImage.jpg");
这将按预期打开保存文件对话框。我使用它而不是将 byteData 发送到 PHP,因为我希望用户有一个熟悉的对话框,让他们设置自己的文件名。
当用户像我一样将操作系统配置为显示文件扩展名时,就会出现问题。这意味着在保存对话框中,文件名包含如下图所示的扩展名,因此用户在重命名文件时很容易删除该扩展名。由于此框的默认文件类型是“所有文件”,因此如果删除扩展名,则文件将以无类型保存。
我不知道有什么方法可以在保存对话框上强制使用文件类型(如果有一个是我的首选路线),因此如果失败,任何人都可以建议我采取一种安全的方法来执行此操作,但仍然允许用户设置文件名本身使用操作系统的标准对话框?
我确实尝试在 save() 之前调用 FileReference.browse() ,如下所示本教程 http://ask.amoeba.co.in/save-images-from-flash-actionsctipt-3-filereference-save-jpgencoder,但这会引发错误,因为您一次只能执行一个 FileReference 调用。
抱歉,这是一个已知的主要 Flash 播放器错误,没有真正的解决方法。
在这里投票:https://bugs.adobe.com/jira/browse/FP-2014 http://web.archive.org/web/20090801100914/http://bugs.adobe.com/jira/browse/FP-2014
(尽管出于某种原因,Adobe 将其称为功能请求。)
Edit 2:
针对 Mac OS 和 Windows 上的 Chrome FP 11.8 进行了修复。
编辑:添加navigateTo解决方法信息
有 php 选项可以执行navigateTo()
:将文件发布到具有 mime 类型的 php 页面image/jpeg
如果指定正确的标头,您可以让浏览器打开浏览器的本机保存对话框,该对话框确实维护扩展。然而,该方法还有其他缺点:
- flex 内部没有错误处理
- 额外请求时间
- 额外的服务器负载。
- 上传和重新下载文件时不会向用户提供任何反馈。
- inconsistent user experience across browser/os.
- 有些浏览器实际上会弹出一个新窗口,然后消失
- 有些人会离开窗户。
- 有些根本没有任何新窗口。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)