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