据我所知,只有三种方法可以通过阅读现有问题来获取MIME类型。
1)使用MimeTypeMap.getFileExtensionFromUrl
从文件扩展名确定它
2)使用inputStream
和URLConnection.guessContentTypeFromStream
进行“猜测”
3)使用ContentResolver
获取MIME类型,使用内容Uri(content:\)context.getContentResolver().getType
但是我只有file对象,可以得到的Uri
是文件路径Uri
(file:),文件没有扩展名,还有什么办法可以得到文件的MIME类型,或者从文件路径Uri判断内容Uri?
4条答案
按热度按时间tpgth1q71#
你试过这个吗?它对我有效(只适用于图像文件)。
当然你也可以使用其他的方法,比如
BitmapFactory.decodeFile
或者BitmapFactory.decodeResource
,如下所示:如果无法确定MIME类型,它将返回null。
0tdrvxhp2#
是否还有一种方法可以获取文件的MIME类型?
不仅仅是文件名。
或者一种从文件路径Uri确定内容Uri的方法?
不一定有任何“内容URI”。欢迎您尝试在
MediaStore
中查找该文件,并查看是否由于某种原因,它碰巧知道MIME类型。MediaStore
可能知道也可能不知道MIME类型,如果它不知道,则无法确定它。如果您 * 确实 * 有
content://
Uri
,请在ContentResolver
上使用getType()
来获取MIME类型。57hvy0tb3#
第一个字节包含文件扩展名
mwkjh3gx4#
要获取没有扩展名的文件的MIME类型,您需要使用不同的方法。一种方法是读取文件的前几个字节,并根据文件格式签名(也称为“幻数”)确定MIME类型。
此代码使用FileInputStream类将文件的第一个字节读入ByteArray。然后将该字节提取为整数,并用于在幻数和MIME类型的Map中查找相应的MIME类型。如果无法确定MIME类型,则函数将返回“application/octet-stream”作为默认值。
请注意,此代码仅检查文件的第一个字节,因此它可能无法始终准确地确定不带扩展名的文件的MIME类型。要获得更准确的结果,您可能需要检查文件的其他字节或使用提供更全面MIME类型检测的库。