尝试从.html
这样的扩展程序中获取Mime类型应该返回text/html
。
我知道如何使用文件获取Mime但不是其他方式。有没有办法从扩展中查询mime,至少是已知的?
答案 0 :(得分:5)
您需要在GIO中使用GContentType
:
https://developer.gnome.org/gio/stable/gio-GContentType.html
准确地说g_content_type_guess()
:
https://developer.gnome.org/gio/stable/gio-GContentType.html#g-content-type-guess
获取文件名或文件内容,并返回猜测的内容类型;从那里,您可以使用g_content_type_get_mime_type()
获取内容类型的MIME类型。
这是如何使用g_content_type_guess()
:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <gio/gio.h>
int
main (int argc, char *argv[])
{
const char *file_name = "test.html";
gboolean is_certain = FALSE;
char *content_type = g_content_type_guess (file_name, NULL, 0, &is_certain);
if (content_type != NULL)
{
char *mime_type = g_content_type_get_mime_type (content_type);
g_print ("Content type for file '%s': %s (certain: %s)\n"
"MIME type for content type: %s\n",
file_name,
content_type,
is_certain ? "yes" : "no",
mime_type);
g_free (mime_type);
}
g_free (content_type);
return EXIT_SUCCESS;
}
编译完成后,Linux上的输出为:
Content type for file 'test.html': text/html (certain: no)
MIME type for content type: text/html
说明:在Linux上,内容类型是MIME类型;在其他平台上不是这样,这就是为什么必须将GContentType
字符串转换为MIME类型。
另外,正如您所看到的,仅使用扩展名将设置布尔是某些标志,因为扩展本身不足以确定准确的内容类型。