Cześć,
pracuję nad stroną internetową, która będzie wyświetlała bardzo dużo zdjęć, będzie to galeria pokazująca zbiory kolekcjonerów. Użytkownik będzie mógł z poziomu weba dodawać zdjęcia do bazy danych. Zdjęcia wyświetlone w galerii będą dynamicznie pobierane z bazy danych i przesyłane jsonem itp. Na razie mam tak, że w bazie danych przetrzymuję zdjęcia jako BLOBy, bloby te wysyłane są w formacie base64 jako json i konwertowane na URL i wyświetlane na stronie internetowej. Zastanawiam się czy takie rozwiązanie jest prawidłowe? Przesyłane są jednak ogromne ciągi znaków, ale nie mam pomysłu na inne rozwiązanie. Chcialbym tylko się dowiedzieć czy idę w dobrym kierunku, a jak nie to prośba o jakąś podpowiedź.
Pozdrawiam
0
1
Możesz też użyć np. @Produces("image/png").
Jak już masz obrazek w tablicy bajtów wysłasz go np. w ten sposób:
byte[] image = byteArrayOutputStream.toByteArray();
return Response.ok(imageData).build();
1
A nie lepiej trzymać obrazki poza bazą i przesyłać tylko urle?
0
Połączyłem wasze pomysły, faktycznie lepiej będzie nie trzymać zdjęć jako bloby w bazie danych. Jedynie zostawię sobie ścieżkę do zdjęć żeby powiązać dodatkowe informacje.
Może się komuś przyda co mam:
Po stronie JS:
blob : function(callback) {
var xhr = new XMLHttpRequest();
xhr.open('GET', "./bottlecaps/photo" , true);
xhr.responseType = 'arraybuffer';
xhr.onload = function(e) {
if (this.status == 200) {
var blob = this.response;
if (callback) {
callback(blob);
}
}
};
xhr.send();
}
Potem to konwertuję na urla.
Po stronie Javy:
@GET
@Produces({"image/jpeg; charset=windows-1250"})
@Path("photo")
public Response getPhoto() {
File file = new File("...");
String mt = new MimetypesFileTypeMap().getContentType(file);
return Response.ok(file, mt).build();
}
Dzięki i pozdrawiam.