le lien fournies par votre "How do I handle file uploads to my app?" explique comment vous pouvez télécharger l'image.
pour héberger les images, vous devez utiliser le Datastore service pour stocker et servir l'image ainsi que d'autres données de votre
Voici un exemple de code. Il s'agit d'une esquisse, pour savoir comment vous pouvez avoir votre propre entité (par exemple, entreprise, utilisateur, etc.) avoir un champ pour une image. J'ai ignoré toutes les erreurs de traitement et de récupération pour simplifier le code.
Déclaration de votre entité avec l'image. Vous pouvez imaginer avoir d'autres champs, par ex. balises, emplacement, etc
@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; }
}
Puis, quand vous commencez à accepter des images (attention pour les cas où une image avec le même nom a déjà été téléchargée en plus des échecs de téléchargement de fichiers typiques). ServletFileUpload
et IOUtils
sont des classes qui font partie de la bibliothèque 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());
}
Et enfin, quand vous voulez servir une image donnée son nom:
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());
}
merci beaucoup pour cette réponse claire et compréhensible !!! :) – OXMO456
merveilleux, merci. pouvez-vous me dire pourquoi tableau byte ne donnera pas de sortie correcte, bien que son stockage, etc, j'avais posé cette question il y a un certain temps http://stackoverflow.com/questions/2018597/cannot-fetch-image-data-in- gwt-google-datastore-image-is-strected-out – dhaval
excellente réponse! –