flash - 在 FileReference.save() AS3 上锁定文件类型的替代方法

标签 flash actionscript-3 save filereference file-type

更新:

正如下面雅各布的回复中所讨论的,限制或纠正 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 调用。

file save dialog

最佳答案

抱歉,这是一个已知的主要 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 保存对话框,该对话框确实维护扩展。但是,该方法还有其他缺点:

  • flex 内部没有错误处理
  • 额外的请求时间
  • 额外的服务器负载。
  • 在上传和重新下载文件时没有反馈给用户。
  • 跨浏览器/操作系统不一致的用户体验。
  • 一些浏览器实际上会弹出一个消失的新窗口
  • 有些人会离开 window 。
  • 有些根本不会有任何新窗口。
  • 关于flash - 在 FileReference.save() AS3 上锁定文件类型的替代方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6538988/

    相关文章:

    flash - 垃圾回收在 AS3 中是如何工作的?

    c# - 将文字添加到图像并保存

    c# - 处理 WebBrowser 控件上的关键事件?

    flash - 在ActionScript 3中删除YouTube视频的声音

    PHP检测是否安装了flash

    actionscript-3 - 是否可以在Adobe AIR中监视或更改系统音频音量?

    Python Traitsui 保存文件对话 - 覆盖

    swift - 如何在 swift osx 应用程序中本地存储数据?

    flash - 使用 Selenium 和 Webdriver 截取 flash 对象的屏幕截图

    flash - 如何建立一个服务器来播放实时视频?