# MimeType auslesen



## Ariol (6. Okt 2008)

Hi,

Ich hab ein kleines Problem.
Für die Webseite meines Vaters will ich Bilder in eine Datenbank laden.
Das Schreiben und Lesen (mit PHP) klappt soweit, allerdings hab ich ein Problem:

Zum Laden brauch ich den MimeType, den ich auch mit

```
new MimetypesFileTypeMap().getContentType(fl)
```
auslesen kann.

ABER:
Bei png-Dateien will das ganze nicht funktionieren. Als MimeType wird _application/octet-stream_ erkannt.
Firefox erkennt dadurch den BLOB nicht als Bild sondern als einfache Binärdatei, die ich dann zum Download angeboten bekomme.

Hier mal mein bisheriger Testcode:

```
import java.io.File;
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;

import javax.activation.MimetypesFileTypeMap;

public class DbImgStore
{
  public static void main( String[] args )
  {
    FileInputStream   fis = null;
    Connection        cn  = null;
    PreparedStatement st  = null;
    try {
      File fl = new File("Bild.png");    
      fis     = new FileInputStream( fl );
      
      Class.forName("com.mysql.jdbc.Driver");  
      cn = DriverManager.getConnection( "jdbc:mysql://localhost/binary_data", "prodUser", "" );
      
      st = cn.prepareStatement("INSERT INTO binary_data (description,bin_data,filename,filesize,filetype) VALUES (?,?,?,?,?)");
      
      st.setString(1, "DESC");
      st.setBinaryStream( 2, fis, (int)fl.length() );
      st.setString(3, fl.getName());
      st.setString(4, "" + fl.length());
      st.setString(5, new MimetypesFileTypeMap().getContentType(fl));

      
      st.executeUpdate();
      System.out.println( fl.length() + " Bytes successfully loaded." );
    } catch( Exception ex ) {
      System.out.println( ex );
    } finally {
      try { if( null != st  ) st.close();  } catch( Exception ex ) {}
      try { if( null != cn  ) cn.close();  } catch( Exception ex ) {}
      try { if( null != fis ) fis.close(); } catch( Exception ex ) {}
    }
  }
}
```

Danke schonmal im vorraus  :wink:


----------



## Ariol (6. Okt 2008)

OK, habs rausgefunden.

Einfach eine Datei mime.types angelegt und das hier eingefügt:

```
image/png png pnG pNg pNG Png PnG PNg PNG
```

Und dann mit

```
new MimetypesFileTypeMap("mime.types").getContentType(fl)
```
laden.




Wenn jemand eine bessere Lösung weiß, bin ich gerne dafür zu haben.


----------



## Gelöschtes Mitglied 5909 (6. Okt 2008)

probier mal das


```
public static String getMIMEType( File file )
{
 if ( !file.exists() )
  throw new IllegalArgumentException( "File does not exit!" );
 if ( file.isDirectory() )
  return "directory"
 try
 {
  return file.toURI().toURL().openConnection().getContentType();
 }
 catch ( IOException e )
 {
  throw new IllegalArgumentException( e.getMessage() );
 }
}
```

(C) by google


----------



## Ariol (7. Okt 2008)

Klasse, das funzt!
Vielen Dank!

Die Lösung gefällt mir viel besser ^^


----------

