【问题标题】:Determining the actual content type of a file in java [duplicate]在java中确定文件的实际内容类型[重复]
【发布时间】: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

标签: java


【解决方案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));
}

【讨论】:

    猜你喜欢
    • 2018-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多