Firefox addon 如何在下载之前获取文件的mime类型?

Firefox addon 如何在下载之前获取文件的mime类型?,firefox-addon,download,Firefox Addon,Download,在下载文件之前(只有url是已知的情况下),有没有办法识别文件的mime类型? 例如,如果我只想显示某些特定类型的上下文菜单项。或者,下载屏幕应根据下载类型进行更改。您可以使用nsimimemeservice.getTypeFromURI()从文件扩展名获取MIME类型,它将从文件扩展名获取MIME类型。按照这些思路: var uri=Components.classes[“@mozilla.org/network/io service;1”] .getService(组件.接口.NSIOSer

在下载文件之前(只有url是已知的情况下),有没有办法识别文件的mime类型?
例如,如果我只想显示某些特定类型的上下文菜单项。或者,下载屏幕应根据下载类型进行更改。

您可以使用
nsimimemeservice.getTypeFromURI()
从文件扩展名获取MIME类型,它将从文件扩展名获取MIME类型。按照这些思路:

var uri=Components.classes[“@mozilla.org/network/io service;1”]
.getService(组件.接口.NSIOService)
.newURI(“http://example.com/test.gif“,空,空);
var mimeService=Components.classes[“@mozilla.org/mime;1”]
.getService(组件.接口.nsIMIMEService);
var mime=mimeService.getTypeFromURI(uri);

当然,这并不可靠——URL的MIME类型可以是任何内容,
text.gif
可以是HTML页面或SVG图像或其他任何内容。因此,获得MIME类型的唯一真正方法是开始下载。

谢谢,瓦拉迪米尔。FF是否在显示下载窗口之前开始下载文件?上面的代码无法检测mime类型,但FF为链接正确显示了它-。是的,Firefox首先启动下载-否则它甚至不知道需要显示下载窗口。如何在我的扩展中执行相同操作(启动下载以检测mime类型,然后停止)?是否有任何示例需要检查?如果我发送HEAD请求怎么办?是Firefox做的吗?@lauff:不,Firefox不做。Firefox只需启动下载并在收到第一个数据时检查标题。无论哪种方式——当上下文菜单打开时,您都无法做到这一点,您必须依赖我在这里概述的不可靠方法(唯一一种不需要与服务器对话的方法)。