确定java中文件的实际内容类型

时间:2015-05-19 10:59:03

标签: java

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

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

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

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

2 个答案:

答案 0 :(得分:0)

您可以在下面的库中找到相同的内容

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

答案 1 :(得分:0)

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

使用WorkbookFactory.create()方法获取工作簿: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));
}