Przesyłanie dużej ilości zdjęć RESTem

0

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

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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1