Java Files.probeContentType的替代方案?

Java Files.probeContentType的替代方案?,java,Java,在web项目中,用户上传他们的文件,但当我在服务器上收到它们时,它们被存储为.tmp文件,而不是原始文件扩展名(这也是我的首选行为) 但是,这会导致文件出现问题。probeContentType()。对于我来说,在我的Linux开发机器上,Files.probeContentType()可以正常工作并确定正确的mime类型,但当我将项目上载到生产服务器(amazon beanstalk)时,它似乎无法正确确定mime类型 通过阅读javadocs,似乎Files.probeContentType

在web项目中,用户上传他们的文件,但当我在服务器上收到它们时,它们被存储为.tmp文件,而不是原始文件扩展名(这也是我的首选行为)

但是,这会导致
文件出现问题。probeContentType()
。对于我来说,在我的Linux开发机器上,
Files.probeContentType()
可以正常工作并确定正确的mime类型,但当我将项目上载到生产服务器(amazon beanstalk)时,它似乎无法正确确定mime类型

通过阅读javadocs,似乎
Files.probeContentType()
的实现不同,我认为在生产服务器上,它正在读取文件扩展名,因此无法确定内容类型

Files.probeContentType()
接受一个
File
参数并返回一个类似
image/png
的字符串作为结果mime类型,有什么好的、快速的替代方法吗?

请看下面的示例。它可以轻松确定mime类型:

 Tika tika = new Tika();
 File file = ...
 String mimeType = tika.detect(file);
以下是所需的最小maven依赖项:

 <dependency>
    <groupId>org.apache.tika</groupId>
    <artifactId>tika-core</artifactId>
    <version>1.12</version>
 </dependency>

org.apache.tika
提卡岩芯
1.12
建议使用:

InputStream is = new BufferedInputStream(new FileInputStream(file));
mimeType = URLConnection.guessContentTypeFromStream(is);
//...close stream
这同样有效


String mimeType=URLConnection.guessContentTypeFromName(新文件(路径).getName())

您能将它们存储为
filename.extension.tmp
?@PM77-1不,这不是我想要的。用户只需将其.exe文件重命名为.png,服务器就会接受该文件。我希望它实际读取文件以确定正确的mime类型。您知道我需要从maven页面向我的项目添加哪个maven工件吗。他们有很多模棱两可的工具,比如
tika解析器
,只是
tika
,我不确定我需要哪一个。当然,请参阅更新的答案。当我面临类似的问题时,tika core对我的项目来说已经足够了,非常感谢!在添加依赖项之前,请确保通过选中此处获得最新版本:我需要包含tika解析器来处理jpg和tiff的模拟类型检测。@EdgeCaseBerg这适用于tika 1.12,仅核心(无tika解析器):
t.detect(“file.jpeg”)
t.detect(“file.jpg”)
t.detect(“file.tiff”)
(结果是
image/jpeg-image/jpeg-image/tiff
)。这将从文件名解析类型,而不是尝试读取文件中的元数据,与OP要求的相反