34

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

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

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

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

4

3 回答 3

44

看看Apache Tika。它可以很容易地确定 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>
于 2013-10-31T16:37:56.803 回答
11

这个答案建议使用:

InputStream is = new BufferedInputStream(new FileInputStream(file));
mimeType = URLConnection.guessContentTypeFromStream(is);
//...close stream
于 2013-10-31T16:40:34.677 回答
-3

这也有效

String mimeType = URLConnection.guessContentTypeFromName(new File(path).getName());

于 2019-02-15T08:02:01.120 回答