2014-01-10

Blob problem med MySql och Spring MVC

Jag hade problem med en bild som är lagrad i en MySql databas och var lagrad med datatypen Blob.
Problemet var att bilden vägrade visa sig på sidan. Lösningen var att importera rätt paket och att mappa rätt url i din jsp sida.

Istället för java.jdbc.sql.Blob; skulle det vara java.sql.Blob;

Hela lösningen;

1. Spara ner bilden med datatypen Blob i din domänklass :

@Column(name = "image")
@Lob
private Blob image;

2. Hämta den blob objektet genom att hämta hela objektet som den ligger i mitt fall i en Person :

@Override
public Person getPerson(int personId) {
return (Person)session.getCurrentSession().get(Person.class, personId);
}

3. Hämta den via en service och lägg upp den i din Controller.

@RequestMapping(value = "/image/{id}", method = RequestMethod.GET)
public String viewImages(@PathVariable int id, HttpServletResponse response) throws SQLException {

Person person = service.getPerson(id);
Blob blob = person.getImage();

try {
         
            OutputStream out = response.getOutputStream();
            response.setContentType("image/JPEG");
            IOUtils.copy(person.getImage().getBinaryStream(), out);
            log.trace(person.getImage().getBytes(1, (int) blob.length()));
            out.flush();
            out.close();
       
        } catch (IOException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
       
       
        return null;
    }


Obs bilder måste ha en egen kontroller eftersom din jsp behöver en <img src="url">.

4. Lägg till den i din .jsp

<td><img src= "<%= request.getContextPath() %>/image/${person.id}.html"/></td>

Slutresultatet :