String fileName = "/path/to/file";
MimetypesFileTypeMap mimeTypesMap = new MimetypesFileTypeMap();
// only by file name
String mimeType = mimeTypesMap.getContentType(fileName);
// or by actual File instance
File file = new File(fileName);
mimeType = mimeTypesMap.getContentType(file);
24条答案
按热度按时间zaq34kh61#
来自印度:
xqkwcwgp2#
上传文件最好使用两层验证。
首先,您可以检查mimetype并验证它。
其次,您应该将文件的前4个字节转换为十六进制,然后将其与幻数进行比较。然后它将是一种真正安全的方法来检查文件验证。
wko9yo5t3#
如果您是android开发人员,那么可以使用实用程序类
android.webkit.MimeTypeMap
它将mime类型Map到文件扩展名,反之亦然。下面的代码片段可能会对您有所帮助。
disho6za4#
在尝试了其他各种库之后,我决定使用mime util。
kxxlusnw5#
Apache提卡。
两行代码。
下面的屏幕截图
7fyelxc56#
我尝试了几种方法,包括@joshua fox说的第一种。但是有些人不能识别像pdf文件那样的频繁的mimetype,而另一些人不能信任假文件(我尝试了一个扩展名改为tif的rar文件)。正如@joshua fox所言,我找到的解决方案是使用mimeutil2,如下所示:
llmtgqce7#
如果你坚持使用Java5-6,那么这个工具类来自servoy开源产品。
你只需要这个函数
它探测内容的第一个字节,并基于该内容而不是文件扩展名返回内容类型。
xwmevbvl8#
用我的5美分
tl博士
我使用mimetypesfiletypemap,并将任何不存在的、我特别需要的mime添加到mime.types文件中。
现在,长文写道:
首先,mime类型列表非常庞大,请参见:https://www.iana.org/assignments/media-types/media-types.xhtml
我喜欢先使用jdk提供的标准设施,如果这不起作用,我会去找别的东西。
根据文件扩展名确定文件类型
从1.6开始,java就有了mimetypesfiletypemap,正如上面的一个答案所指出的,这是确定mime类型的最简单方法:
在它的vanilla实现中,这做的不多(即,它适用于.html,但不适用于.png)。但是,添加您可能需要的任何内容类型都非常简单:
在项目的meta inf文件夹中创建名为“mime.types”的文件
为您需要的每个mime类型添加一行,而默认实现没有提供(有数百种mime类型,列表会随着时间的推移而增长)。
png和js文件的示例条目如下:
有关mime.types文件格式,请参阅此处的更多详细信息:https://docs.oracle.com/javase/7/docs/api/javax/activation/mimetypesfiletypemap.html
根据文件内容确定文件类型
从1.7开始,java就有了java.nio.file.spi.filetypedetector,它定义了一个标准api,用于以特定于实现的方式确定文件类型。
要获取文件的mime类型,只需使用文件并在代码中执行以下操作:
api定义提供了支持从文件名或文件内容(魔法字节)确定文件mime类型的工具。这就是为什么probecontenttype()方法抛出ioexception,以防此api的实现使用提供给它的路径来实际尝试打开与其关联的文件。
同样,这个(jdk附带的)的普通实现还有很多需要改进的地方。
在银河系中的某个理想世界里,在很远很远的地方,所有这些试图解决这个文件到mime类型问题的库都只需实现java.nio.file.spi.filetypedetector,您可以将首选实现库的jar文件放入类路径中,就是这样。
在现实世界中,你需要tl,dr部分,你应该找到在它的名字旁边有很多星星的库并使用它。对于这个特殊的情况,我不需要一个。
gzszwxb49#
如果您使用的是servlet,并且servlet上下文对您可用,则可以使用:
jjhzyzn010#
如果您在linux操作系统上工作,那么就有一个命令行
file --mimetype
:然后
nnt7mjpx11#
在spring多部件文件中;
org.springframework.web.multipart.multipartfile文件
file.getContentType();
voase2hg12#
cs7cruho13#
简单且最佳的选项是从文件位置检索内容mime类型。
使用此导入
代码
inkz8wg914#
不幸的是,
不起作用,因为使用url会使文件处于锁定状态,例如,它是不可删除的。
但是,您有:
还有下面的内容,它的优点不仅仅是使用文件扩展名,还可以查看内容
但是,正如上面的评论所建议的,mime类型的内置表是非常有限的,例如不包括msword和pdf。因此,如果您想进行概括,就需要超越内置库,使用mime util(这是一个很棒的库,同时使用文件扩展名和内容)。
tkclm6bt15#
jafapi是jdk6的一部分。看看
javax.activation
包裹。最有趣的课程是
javax.activation.MimeType
-一个实际的mime类型持有者-和javax.activation.MimetypesFileTypeMap
-类的示例可以将mime类型解析为文件的字符串: