在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中确定文件的实际内容类型[重复]的主要内容,如果未能解决你的问题,请参考以下文章