link swój warunkiem "How do I handle file uploads to my app?" wyjaśnia, w jaki sposób można przesłać obraz.
gospodarzem zdjęć musisz użyć Datastore service do przechowywania i służyć obraz wraz z innymi danymi .
Oto przykładowy kod. Jest to szkic, ponieważ możesz mieć własny element (np. Biznes, użytkownik itp.), Który ma pole dla obrazu. Zignorowałem wszystkie operacje obsługi i odzyskiwania błędów, aby uprościć kod.
Zgłaszanie swojej istoty za pomocą obrazu. Możesz sobie wyobrazić, że masz inne pola, np. znaczniki, lokalizacja, itp
@Entity
public class MyImage {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Long id;
@Persistent
private String name;
@Persistent
Blob image;
public MyImage() { }
public MyImage(String name, Blob image) {
this.name = name;
this.image = image;
}
// JPA getters and setters and empty contructor
// ...
public Blob getImage() { return image; }
public void setImage(Blob image) { this.image = image; }
}
Wtedy, kiedy rozpocząć przyjmowanie obrazów (uważaj na przypadkach, gdy obraz o tej samej nazwie już przesłane oprócz typowych awarii przesyłania plików). ServletFileUpload
i IOUtils
to zajęcia należące do biblioteki Apache Commons.
// Your upload handle would look like
public void doPost(HttpServletRequest req, HttpServletResponse res) {
// Get the image representation
ServletFileUpload upload = new ServletFileUpload();
FileItemIterator iter = upload.getItemIterator(req);
FileItemStream imageItem = iter.next();
InputStream imgStream = imageItem.openStream();
// construct our entity objects
Blob imageBlob = new Blob(IOUtils.toByteArray(imgStream));
MyImage myImage = new MyImage(imageItem.getName(), imageBlob);
// persist image
PersistenceManager pm = PMF.get().getPersistenceManager();
pm.makePersistent(myImage);
pm.close();
// respond to query
res.setContentType("text/plain");
res.getOutputStream().write("OK!".getBytes());
}
I wreszcie, jeśli chcesz służyć obraz ze względu na jej nazwę:
Blob imageFor(String name, HttpServletResponse res) {
// find desired image
PersistenceManager pm = PMF.get().getPersistenceManager();
Query query = pm.newQuery("select from MyImage " +
"where name = nameParam " +
"parameters String nameParam");
List<MyImage> results = (List<MyImage>)query.execute(name);
Blob image = results.iterator().next().getImage();
// serve the first image
res.setContentType("image/jpeg");
res.getOutputStream().write(image.getBytes());
}
dziękuję bardzo za tę jasną i zrozumiałą odpowiedź !!! :) – OXMO456
cudownie, dziękuję. czy możesz mi powiedzieć, dlaczego tablica bajtów nie da prawidłowego wyniku, chociaż jego zapisywanie itp., zadałem to pytanie jakiś czas temu http://stackoverflow.com/questions/2018597/cannot-fetch-image-data-in- gwt-google-datastore-image-is-strected-out – dhaval
Doskonała odpowiedź! –