2011-08-19 68 views

Respuesta

9

¿Quiere decir que desea obtener la extensión del archivo para el cual el blob almacena el contenido? Entonces, si el BLOB almacena el contenido de un archivo jpeg, ¿quiere "jpg"?

¡Eso no es posible!

Si guarda un archivo en una burbuja, y la necesidad de recordar la extensión, se suele mantener una columna aparte, como un VARCHAR para la extensión. (De hecho, esto lo hago en una aplicación en la que trabajo actualmente, y también tengo una columna para el tipo mime).

+1

Utilizaría más de 3 caracteres. '.html',' .java' y '.jpeg' son solo 3 extensiones de archivo bastante comunes con más de 3 caracteres. –

+0

Jup .. se dio cuenta de que cuando lo escribí ... eliminé esa constante ... – aioobe

+0

Dowenvoter, me gustaría dejar un comentario? – aioobe

1

Pruebe con ByteArrayDataSource (http://download.oracle.com/javaee/5/api/javax /mail/util/ByteArrayDataSource.html) encontrará allí el método getContentType(), que debería ayudar pero nunca lo he intentado personalmente.

2

No es perfecto, pero el Java Mime Magic library puede ser capaz de inferir la extensión de archivo:

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

Una alternativa para usar una columna separada es usar Magic Numbers. Aquí hay algunos pseudocódigos:

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

Tendría que hacer esto para cada tipo de archivo que admita. Algunos tipos de archivos oscuros pueden tener que averiguarlo a través de un editor hexadecimal (el número mágico siempre es los primeros bytes del código). El beneficio de usar el número mágico es que obtienes el tipo de archivo real, y no lo que el usuario acaba de decidir nombrar.

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); 
      } 
Cuestiones relacionadas