在java中确定文件的实际内容类型[重复]

Posted

技术标签:

【中文标题】在java中确定文件的实际内容类型[重复]【英文标题】:Determining the actual content type of a file in java [duplicate] 【发布时间】:2015-07-31 04:03:30 【问题描述】:

我有一个扩展名为 xlsx 的文件,现在如果我将其扩展名更改为 png,那么有没有办法获取该文件的实际内容类型,即 xlsx。出于某些安全原因,我必须确定它。必须限制图像文件以外的文件。但是用户可以在重命名文件后上传文件,因为我正在按扩展名检查文件。请帮忙。

我这样做了:-- final MimetypesFileTypeMap fileTypeMap = new MimetypesFileTypeMap();

    System.out.println( fileTypeMap.getContentType("/home/ist-48/Downloads/report.png"));

实际上报告是一个 xlsx 文件.. 但它的返回:--- image/png

【问题讨论】:

如果你能详细说明一些例子就更好了。 public static void main(String ar[]) final MimetypesFileTypeMap fileTypeMap = new MimetypesFileTypeMap(); System.out.println(fileTypeMap.getContentType("/home/task.png")); 这给了我图像/png,但它实际上是一个 xlsx 文件,我已将其重命名为 png 【参考方案1】:

你会在下面的库中找到相同的

http://tika.apache.org/0.8/detection.html

【讨论】:

非常感谢...确实有效【参考方案2】:

是的,POI 提供了一组新的接口,适用于这两种类型。

使用 WorkbookFactory.create() 方法获取 Workbook:http://poi.apache.org/apidocs/org/apache/poi/ss/usermodel/WorkbookFactory.html

您可以在不依赖文件扩展名的情况下检查 excel 文件(这是不可靠的 - 例如,许多 csv 文件具有 xls 扩展名,但 POI 无法解析):

//simple way to check for both types of excel files
public boolean isExcel(InputStream i) throws IOException
    return (POIFSFileSystem.hasPOIFSHeader(i) || POIXMLDocument.hasOOXMLHeader(i));

【讨论】:

以上是关于在java中确定文件的实际内容类型[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何确保文件的内容类型是实际的内容类型

以编程方式确定 OSX 上的文件内容类型

有啥方法可以从文件中扣除内容类型[重复]

从内容而不是从扩展名中获取文件类型[重复]

如何通过内容确定文件的 MIME 类型?

java中list强转为map类型