2016-07-08 3 views
0

업로드 할 때 원본 콘텐츠 형식 (MIME 형식)을 찾아야합니다.파일을 업로드하는 동안 원본 MIME 유형을 찾는 방법은 무엇입니까?

PDF 파일 만 허용하고 싶지만 .exe 플로피의 이름을 .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

파일 내용 유형은 업로드시 사용자 에이전트/브라우저에 의해 결정됩니다. 이미 알고 있듯이, 이것은 스푸핑되거나 부정확 할 수 있습니다. 파일의 콘텐츠 유형으로는 더 이상 할 수 없습니다.

대안은 iText, PDFBox 또는 유사한 라이브러리를 사용하여 PDF를 열려고 시도하여 콘텐츠 형식을 확인한 후 추가로 확인하는 것입니다. 파일을 열 수 없다면 사용자에게 문제가 있음을 알릴 수 있습니다.

0

공공 부울 isPDF (문자열 파일 이름) {

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

File이 아닌 MultipartFile의 인스턴스가 있는데, 업로드 할 때 파일을 검사하고 있으므로 파일 경로가 없습니다. 나는 임시 loaction에있는 파일을 저장하고 싶지 않다. –