Files.probeContentType的替代?

Cli*_*ote 29 java

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

但是,这会导致问题Files.probeContentType().虽然本地对我来说,在我的Linux开发机器上,Files.probeContentType()正常工作并确定正确的mime类型,当我将项目上传到生产服务器(amazon beanstalk)时,它似乎无法正确确定mime类型.

从阅读javadocs来看,似乎执行的Files.probeContentType()是不同的,我认为在生产服务器上,它正在读取文件扩展名等,因此无法确定内容类型.

什么是好的,快速的替代方案Files.probeContentType()将接受一个File参数并返回一个字符串,如image/png生成的mime类型?

Jk1*_*Jk1 35

看看Apache Tika.它可以轻松确定mime类型:

 Tika tika = new Tika();
 File file = ...
 String mimeType = tika.detect(file);
Run Code Online (Sandbox Code Playgroud)

这是一个最小的所需maven依赖:

 <dependency>
    <groupId>org.apache.tika</groupId>
    <artifactId>tika-core</artifactId>
    <version>1.12</version>
 </dependency>
Run Code Online (Sandbox Code Playgroud)


sum*_*ulb 8

这个答案建议使用:

InputStream is = new BufferedInputStream(new FileInputStream(file));
mimeType = URLConnection.guessContentTypeFromStream(is);
//...close stream
Run Code Online (Sandbox Code Playgroud)