Files.probeContentType的替代?

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

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

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

Files.probeContentType()的一个好的,快速的替代方法是什么,它接受File参数并返回像image/png这样的字符串作为生成的mime类型?

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

  Tika tika = new Tika(); File file = ... String mimeType = tika.detect(file); 

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

   org.apache.tika tika-core 1.12  

这个答案建议使用:

 InputStream is = new BufferedInputStream(new FileInputStream(file)); mimeType = URLConnection.guessContentTypeFromStream(is); //...close stream