2016-07-08 48 views
0

Ich muss den ursprünglichen Inhaltstyp (MIME-Typ) einer Datei zum Zeitpunkt des Hochladens finden.Wie finde ich den ursprünglichen MIME-Typ einer Datei beim Hochladen?

Ich möchte nur PDF-Dateien zulassen, aber wenn ich eine .exe-Datei in .pdf umbenenne, zeigt ihr Typ pdf an.

Ich möchte diese Art von Dateien beschränken.

Ich verwende den folgenden Code ein:

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

auch einige Online-Tools zur Verfügung, den ursprünglichen Inhaltstyp zu finden. Ich habe versucht mit http://www.checkfiletype.com/ und es funktioniert.

+0

Sie können nicht alles einfach tun. Das Problem ist nicht auf Ihrer Seite, wenn der Server, von dem Sie herunterladen, die Datei als PDF eingibt, dann können Sie nichts schlauer machen. Sie können versuchen, zu verifizieren, dass es den PDF-Header in der Datei selbst gibt, aber ich bin mir nicht sicher, ob es sich lohnt, oder? –

Antwort

0

Der Dateiinhaltstyp wird vom Benutzer-Agent/Browser beim Hochladen festgelegt. Wie Sie bereits wissen, kann dies gefälscht oder falsch sein. Es gibt wirklich nicht mehr, was Sie mit dem Inhaltstyp der Datei tun können.

Eine Alternative ist, mehr Kontrolle zu tun, nachdem Sie den Inhaltstyp überprüft hat, indem er versucht, die PDF-Datei zu öffnen für PDFBox mit iText, Lesen oder eine ähnliche Bibliothek. Wenn Sie die Datei nicht öffnen können, können Sie dem Benutzer mitteilen, dass ein Problem damit besteht.

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; 

}

+1

Probieren Sie es aus, es funktioniert für mich. –

+0

Ich habe eine Instanz von MultipartFile nicht Datei, und ich habe keinen Dateipfad, da ich es zum Zeitpunkt des Hochladens überprüfe. Ich möchte die Datei nicht vorübergehend speichern. –