如何在上传时找到文件的原始MIME类型?

时间:2016-07-08 10:33:48

标签: java security spring-security mime-types multipart

我必须在上传时找到文件的原始内容类型(MIME类型)。

我想只允许PDF文件,但如果我将.exe fiel重命名为.pdf flie,则其类型显示为pdf。

我想限制这类文件。

我使用以下代码:

if (!fileMultipart.getContentType().equalsIgnoreCase("application/pdf")) {
        msg = "Only pdf files are allowed.";
        System.out.println("Only pdf files are allowed.");
    }

此外,还有一些在线工具可用于查找原始内容类型。我尝试使用http://www.checkfiletype.com/并且它有效。

2 个答案:

答案 0 :(得分:0)

文件内容类型由上载时的用户代理/浏览器确定。如您所知,这可能是欺骗或不正确的。实际上,只有文件的内容类型才能做到。

另一种方法是在您通过尝试使用iTextPDFBox或某些类似的库打开PDF进行阅读来验证内容类型后进行更多检查。如果您无法打开该文件,那么您可以让用户知道它有问题。

答案 1 :(得分:0)

public boolean isPDF(String fileName) {

  File file = new File(fileName);
  System.out.println("file upload isExist " + file.exists());
  boolean result = false;
  //Scanner input = null;
  try {
     Scanner input = new Scanner(new FileReader(file));
     System.out.println("fileScanner input " + input);
     while (input.hasNextLine()) {
        final String checkline = input.nextLine();
        if (checkline.contains("%PDF-")) {
           // a match!
           result = true;
           break;
        }
     }
  } catch (FileNotFoundException ex) {
     System.out.println("file upload is not valid " + file);
     Logger.getLogger(UploadContractorFile.class.getName()).log(Level.SEVERE, null, ex);
  }
  System.out.println("file upload final result " + result);
  return result;
 }