2016-07-08 2 views
0

Je dois trouver le type de contenu d'origine (type MIME) d'un fichier au moment du téléchargement.Comment trouver le type MIME d'origine d'un fichier lors de son téléchargement?

Je veux autoriser uniquement les fichiers PDF, mais si je renommer un fichier .exe en format .pdf, son type affiche le pdf.

Je souhaite limiter ce type de fichiers.

J'utilise le code suivant:

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

également des outils en ligne sont disponibles pour trouver le type de contenu original. J'ai essayé d'utiliser http://www.checkfiletype.com/ et cela fonctionne.

+0

Vous ne pouvez rien faire facilement. Le problème n'est pas de votre côté, si le serveur à partir duquel vous téléchargez taper le fichier en format pdf, alors vous ne pouvez rien faire de plus intelligent. Vous pouvez essayer de vérifier qu'il y a l'en-tête PDF dans le fichier lui-même, mais je ne suis pas sûr que cela vaudra la peine, ou? –

Répondre

0

Le type de contenu du fichier est déterminé par l'utilisateur-agent/navigateur lors du téléchargement. Comme vous le savez déjà, cela peut être usurpé, ou incorrect. Il n'y a vraiment pas plus que vous pouvez faire avec juste le type de contenu du fichier. Une alternative est de faire plus de vérification après avoir vérifié le type de contenu en essayant d'ouvrir le PDF pour la lecture en utilisant iText, PDFBox, ou une bibliothèque similaire. Si vous ne pouvez pas ouvrir le fichier, vous pouvez laisser savoir à l'utilisateur qu'il y a un problème.

0

publique isPDF booléenne (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

Essayez-le, ça marche pour moi. –

+0

J'ai instance de MultipartFile pas de fichier, et je n'ai pas de chemin de fichier que je vérifie au moment du téléchargement. Je ne veux pas enregistrer le fichier dans une loaction temporaire. –