2017-12-13 12 views
1

Javaでバックエンドサービスを利用してファイルをアップロードしていますが、不要なファイルタイプがアップロードされているようです。ファイルのコンテンツタイプが実際のコンテンツタイプであることを確認する方法

など。:私はfoo.jpgというファイルがあり、foo.pdfに名前を変更した場合、それは.Howをアップロードします、私は以下foo.pdf の実際の内容は、私はあなたがpache Tika library.を使用することができます

for (Part part : request.getParts()) { 
    if (part.getName().startsWith("file")) { 
     String filename = part.getHeader("content-disposition"); 
     filename = filename.replaceFirst("(?i)^.*filename=\"([^\"]+)\".*$", "$1"); 
     String fileType = part.getContentType(); 
     DocumentUpload documentUpload = new DocumentUpload(); 
     documentUpload.setFilename(filename); 
     documentUpload.setFileType(fileType); 
     documentUpload.setPayload(part.getInputStream());  
     response = documentService.save(documentUpload, uriInfo); 
     break; 
    } 
} 
+2

また、あなたのようなファイルの実際の拡張子を得ることができますか? – Henry

+2

httpリクエストからファイルタイプを取得すると、ブラウザを信頼することになります。より多くの制御が必要な場合は、ファイルを一時的に保存してから、その内容をコンテンツごとに識別してみてください。ここには、https://stackoverflow.com/questions/9738597/how-to-reliably-detect-file-typesなど、いくつかの関連する質問があります –

答えて

2

を使用していたコードで確認することができますBaseDocument上記

public String getMimetype(BaseDocument document) { 
    ContentHandler contenthandler = new BodyContentHandler(); 
    Metadata metadata = new Metadata(); 
    metadata.set(Metadata.RESOURCE_NAME_KEY, document.getName()); 
    Parser parser = new AutoDetectParser(); 
    try { 
     parser.parse(new ByteArrayInputStream(document.getFile()), contenthandler, metadata, null); 
    } catch (IOException | SAXException | TikaException e) { 
     //throw 
    } 

    return metadata.get(Metadata.CONTENT_TYPE); 
} 

は、文書に関する情報を含むだけでカスタムオブジェクトです:

次に、あなたは、このような実際のMIMEタイプを見つけることができます。あなたはあなたが得たバイトは、指定されたファイルタイプで実際にある場合は、サーバー上でチェックしたい

public String getExtension(BaseDocument document) { 
    TikaConfig config = TikaConfig.getDefaultConfig(); 
    MediaType mediaType = null; 
    MimeType mimeType = null; 
    try { 
     mediaType = config.getMimeRepository().detect(new ByteArrayInputStream(document.getFile()), new Metadata()); 
     mimeType = config.getMimeRepository().forName(mediaType.toString()); 
    } catch (MimeTypeException | IOException e) { 
     //throw; 
    } 

    return mimeType.getExtension(); 
}