2011-08-19 34 views

Trả lời

9

Bạn có nghĩa là bạn muốn mở rộng tệp mà blob lưu trữ nội dung? Vì vậy, nếu BLOB lưu trữ nội dung của tệp jpeg, bạn muốn "jpg"?

Điều đó là không thể!

Nếu bạn lưu trữ một tập tin trong một blob, và cần phải nhớ mở rộng, bạn thường giữ một cột riêng biệt, giống như một VARCHAR gia hạn. (Tôi thực sự làm điều này trong một ứng dụng tôi hiện đang làm việc trên, và tôi cũng có một cột cho loại mime.)

+1

Tôi muốn sử dụng nhiều hơn 3 ký tự. '.html',' .java' và '.jpeg' chỉ là 3 phần mở rộng tệp khá phổ biến với nhiều hơn 3 ký tự. –

+0

Jup .. nhận ra rằng khi tôi viết nó ... đã loại bỏ hằng số đó ... – aioobe

+0

Nhân viên giảm tốc, hãy để lại nhận xét? – aioobe

1

Hãy thử với ByteArrayDataSource (http://download.oracle.com/javaee/5/api/javax /mail/util/ByteArrayDataSource.html) bạn sẽ tìm thấy phương thức getContentType() ở đó, điều này sẽ giúp ích nhưng tôi chưa bao giờ thử nó một cách cá nhân.

2

Đó không phải là hoàn hảo, nhưng Java Mime Magic library có thể suy ra các phần mở rộng tập tin:

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

Cách khác để sử dụng cột riêng là sử dụng Magic Numbers. Đây là một số mã giả:

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

Bạn sẽ phải làm điều này cho mọi loại tệp bạn hỗ trợ. Một số loại tệp tối nghĩa bạn có thể phải tự tìm ra thông qua trình chỉnh sửa hex (số ma thuật luôn là vài byte đầu tiên của mã). Lợi ích của việc sử dụng số ma thuật là bạn nhận được loại tệp thực tế và không phải là những gì người dùng vừa quyết định đặt tên cho nó.

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); 
      } 
Các vấn đề liên quan