如何验证具有有效扩展名的文件?

时间:2014-01-14 10:16:21

标签: java file

让我们说我的Java代码的输入是一个jpeg文件。如何在启动输入之前验证输入是否具有有效的扩展名。有时用户上传一个pdf文件,其扩展名被修改为jpeg,从而导致代码崩溃。

每个文件都有幻数。但是有没有办法解决这个问题。

5 个答案:

答案 0 :(得分:3)

如果您只想检查文件名,可以执行以下操作:

public boolean checkJPEG(File file) {
   String fileName = file.getName().toUpperCase();
   return fileName.endsWith(".JPG") || fileName.endsWith(".JPEG");
}

但是此方法仅检查文件名,而不检查内容。更完整的方法包括幻数测试。

public boolean checkJPEG(File file) throws IOException {
   String fileName = file.getName().toUpperCase();
   boolean extension = fileName.endsWith(".JPG") || fileName.endsWith(".JPEG");
   if (!extension) {
      return false;
   }
   FileInputStream in = null;
   try {
      in = new FileInputStream(file)
      byte[] magic = new byte[3];
      int count = in.read(magic);
      if (count < 3) return false;
      return magic[0] == 0xFF && magic[1] == 0xD8 && magic[2] == 0xFF;
   } finally {
      try {
         if (in != null) in.close();
      } catch (IOException ex) {}
   }
}

此处的文件签名列表:http://en.wikipedia.org/wiki/List_of_file_signatures

答案 1 :(得分:1)

您无法确定文件类型,除非完全解析文件并验证它是否完全符合格式规范。只有这样你才能确定

检查幻数是一种快速检查的方法,很有可能正确地猜测类型。但显然它不是万无一失的,它很容易制作一个以字节FF D8 FF开头的文件,看起来像是一个jpeg,但显然无法保证它真的是一个jpeg。

或者只是依赖文件扩展名。

您只需在可靠性和简单性之间进行交易。如果您想要简单,请信任文件扩展名。如果您想要安全,请验证文件内容。

答案 2 :(得分:1)

幻数解决方案已经实现:请参阅this topic以获取Java Mime Magic Library的链接。

答案 3 :(得分:0)

检查文件签名:

http://www.filesignatures.net/index.php?search=JPEG&mode=EXT

http://en.wikipedia.org/wiki/List_of_file_signatures

您可以通过读取几个字节来验证文件类型。

问候。

答案 4 :(得分:0)

一个。下面的这个功能将列出目录中的所有扩展名。您可以做的是列出所有文件并获取所有文件的扩展名,并可以检查哪些文件可以上传。您可以在UI上提供仅允许.jpeg文件的客户端验证。

public static void main(String args[]) {
        System.out.println("GET");
        File fileObj = new File("D:\\");
        File[] listAll = fileObj.listFiles();
        for (File file : listOfFiles) {
        if (file.isFile()) {
            System.out.println("Extension ."+file.getName().substring(file.getName().lastIndexOf('.')+1));
        }
        }
    }

湾关于延期的错误,我没有经历过这样的情况。可能是eltabo指定的点可以提供帮助。