2011-08-19 10 views

Odpowiedz

9

Masz na myśli, że chcesz uzyskać rozszerzenie pliku, dla którego blob przechowuje zawartość? Więc jeśli BLOB przechowuje zawartość pliku jpeg, chcesz "jpg"?

To niemożliwe!

Jeśli przechowujesz plik w obszarze typu blob i musisz pamiętać rozszerzenie, zwykle zachowujesz oddzielną kolumnę, taką jak VARCHAR dla rozszerzenia. (W rzeczywistości robię to w aplikacji, nad którą obecnie pracuję, a także mam kolumnę dla typu MIME.)

+1

Używałbym więcej niż 3 znaków. '.html',' .java' i '.jpeg' to tylko 3 dość popularne rozszerzenia plików z więcej niż 3 znakami. –

+0

Jup ... zdałem sobie sprawę, że kiedy to napisałem ... usunięto tę stałą ... – aioobe

+0

Dowenvoter, czy chcesz zostawić komentarz? – aioobe

1

Wypróbuj z ByteArrayDataSource (http://download.oracle.com/javaee/5/api/javax /mail/util/ByteArrayDataSource.html) znajdziesz tam metodę getContentType(), która powinna pomóc, ale nigdy nie próbowałem jej osobiście.

2

To nie jest idealne, ale Java Mime Magic library może być w stanie wywnioskować, rozszerzenie pliku:

Magic.getMagicMatch(bdata).getExtension(); 
1

Alternatywą dla używania oddzielnej kolumny jest użycie Magic Numbers. Oto pseudo kod:

getFileExtn(BLOB) 
{ 
    PNGMagNum[] = {0x89, 0x50, 0x4E, 0x47} 
    if(BLOB[0:3] == PNGMagNum) 
     return ".png" 
    //More checks... 
} 

Będziesz musiał to zrobić dla każdego obsługiwanego typu pliku. Niektóre niejasne typy plików, które możesz znaleźć samemu, za pomocą edytora szesnastkowego (magiczna liczba to zawsze kilka pierwszych bajtów kodu). Zaletą używania magicznego numeru jest rzeczywisty typ pliku, a nie to, co użytkownik nazwał.

1
if(currentImageType ==null){ 
       ByteArrayInputStream is = new ByteArrayInputStream(image); 
       String mimeType = URLConnection.guessContentTypeFromStream(is); 
       if(mimeType == null){ 
        AutoDetectParser parser = new AutoDetectParser(); 
        Detector detector = parser.getDetector(); 
        Metadata md = new Metadata(); 
        mimeType = detector.detect(is,md).toString(); 

        if (mimeType.contains("pdf")){ 
         mimeType ="pdf"; 
        } 
        else if(mimeType.contains("tif")||mimeType.contains("tiff")){ 
         mimeType = "tif"; 
        } 
       } 
       if(mimeType.contains("png")){ 
        mimeType ="png"; 
       } 
       else if(mimeType.contains("jpg")||mimeType.contains("jpeg")){ 
        mimeType = "jpg"; 
       } 
       else if (mimeType.contains("pdf")){ 
        mimeType ="pdf"; 
       } 
       else if(mimeType.contains("tif")||mimeType.contains("tiff")){ 
        mimeType = "tif"; 
       } 

       currentImageType = ImageType.fromValue(mimeType); 
      } 
Powiązane problemy