在web项目中,用户上传他们的文件,但当我在服务器上收到它们时,它们被存储为.tmp文件,而不是其原始文件扩展名(这也是我的首选行为)。
然而,这导致了Files.probeContentType()
的一个问题。虽然对我来说,在本地,在我的Linux dev机器上,Files.probeContentType()
可以正确地工作并确定正确的mime类型,但当我将我的项目上传到生产服务器(amazon beanstalk)时,它似乎不能正确地确定mime类型。
通过读取javadoc,似乎Files.probeContentType()
的实现是不同的,我认为在生产服务器上,它正在读取文件扩展名,因此无法确定内容类型。
接受File
参数并返回像image/png
这样的字符串作为结果mime类型的Files.probeContentType()
有什么好的、快速的替代方案?
发布于 2013-11-01 00:37:57
看一看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-11-01 00:40:35
This answer建议使用:
InputStream is = new BufferedInputStream(new FileInputStream(file));
mimeType = URLConnection.guessContentTypeFromStream(is);
//...close stream
发布于 2019-02-15 16:02:01
这也是可行的
String mimeType = URLConnection.guessContentTypeFromName(new File(path).getName());
https://stackoverflow.com/questions/19711956
复制相似问题