2011-12-24 71 views
0

有没有什么方法可以在下载文件之前识别MIME类型的文件(只有在知道URL时)? 例如,如果我想仅为某些特定类型显示我的上下文菜单项。或者,应根据下载类型更改下载屏幕。如何在下载之前获取文件的MIME类型?

回答

1

您可以使用nsIMIMEService.getTypeFromURI()从文件扩展名中获取MIME类型,它将从文件扩展名中获取MIME类型。沿着这些线路:

var uri = Components.classes["@mozilla.org/network/io-service;1"] 
        .getService(Components.interfaces.nsIIOService) 
        .newURI("http://example.com/test.gif", null, null); 
var mimeService = Components.classes["@mozilla.org/mime;1"] 
          .getService(Components.interfaces.nsIMIMEService); 
var mime = mimeService.getTypeFromURI(uri); 

当然,这是没有什么接近可靠 - MIME类型的URL可以是任何东西,text.gif可以是HTML页面或SVG图像或其他任何东西。所以获得MIME类型的唯一方法是开始下载。

+0

谢谢,弗拉基米尔。在显示下载窗口之前,FF是否开始下载文件?上面的代码无法检测MIME类型,但FF显示链接正确 - http://dl.rutracker.org/forum/dl.php?t=3272931。 – 2012-01-07 20:33:57

+0

是的,Firefox首先下载 - 否则它甚至不知道它需要显示下载窗口。 – 2012-01-07 22:06:13

+0

如何在我的扩展中执行相同操作(开始下载以检测MIME类型,然后停止它)?是否有任何示例要检查? – 2012-01-08 06:53:56