2016-07-08 2 views
0

Я должен найти исходный тип контента (тип MIME) файла во время загрузки.Как найти оригинальный 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/, и он работает.

+0

Вы ничего не можете легко сделать. Проблема не на вашей стороне, если сервер, с которого вы загружаете, введите файл в формате pdf, тогда вы не сможете сделать ничего более умного. Вы можете попытаться проверить, что в самом файле есть заголовок PDF, но я не уверен, что он будет стоить усилий, или? –

ответ

0

Тип содержимого файла определяется пользователем-агентом/браузером при загрузке. Как вы уже знаете, это может быть подделано или неверно. Там действительно не больше, чем вы можете сделать только с типом содержимого файла.

Альтернативой является дополнительная проверка после того, как вы проверили тип контента, пытаясь открыть PDF для чтения с использованием iText, PDFBox или некоторой подобной библиотеки. Если вы не можете открыть файл, вы можете сообщить пользователю, что с ним проблема.

0

общественного логический 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; 

}

+1

Попробуйте, это работает для меня. –

+0

У меня есть экземпляр MultipartFile not File, и у меня нет пути к файлу, поскольку я проверяю его во время загрузки. Я не хочу сохранять файл во временном разрешении. –

Смежные вопросы