更新:
正如下面雅各布的回复中所讨论的,限制或纠正 FileReference.save 的行为是不可能的。任何人都可以提出一个替代方案(服务器是 Apache/PHP),它符合我在这篇文章中的所有标准并避免了我与 Jacob 讨论的陷阱?
结束编辑
我正在使用 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(),如 this tutorial 所示,但这会引发错误,因为您一次只能执行一个 FileReference 调用。
最佳答案
抱歉,这是一个已知的主要 Flash 播放器错误,没有真正的解决方法。
在这里投票:https://bugs.adobe.com/jira/browse/FP-2014
(尽管出于某种原因,Adobe 将其称为功能请求。)
编辑2:
修复了 FP 11.8 for Chrome,在 Mac OS 和 Windows 上。
https://bugbase.adobe.com/index.cfm?event=bug&id=2898055
编辑:添加navigateTo 解决方法信息
有一个 php 选项可以做一个 navigateTo()
: 将文件发布到一个 php 页面,该页面的 MIME 类型为 image/jpeg
如果您指定正确的 header ,您可以让浏览器调出浏览器的 native 保存对话框,该对话框确实维护扩展。但是,该方法还有其他缺点:
关于flash - 在 FileReference.save() AS3 上锁定文件类型的替代方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6538988/