लिंक आपके प्रदान की "How do I handle file uploads to my app?" बताते हैं आप चित्र अपलोड कर सकते हैं कैसे।
छवियों की मेजबानी करने के लिए, आप अपने डेटा के साथ की दुकान और छवि की सेवा के लिए Datastore service उपयोग करने की आवश्यकता
यहां एक नमूना कोड है। यह एक स्केच के रूप में है, क्योंकि आप अपनी खुद की इकाई कैसे प्राप्त कर सकते हैं (i.g. व्यवसाय, उपयोगकर्ता, आदि) में एक छवि के लिए एक फ़ील्ड है। कोड को सरल बनाने के लिए मैंने सभी त्रुटि प्रबंधन और पुनर्प्राप्ति को अनदेखा कर दिया।
अपनी इकाई को छवि के साथ घोषित करना। आप कल्पना कर सकते हैं कि अन्य फ़ील्ड, उदा। टैग, स्थान, आदि
@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; }
}
फिर जब आप को स्वीकार करने छवियों (मामलों में जहां एक ही नाम के साथ एक छवि पहले से ही विशिष्ट फ़ाइल अपलोड विफलताएं के अलावा अपलोड किया गया है के लिए बाहर घड़ी) शुरू करते हैं। ServletFileUpload
और IOUtils
कक्षाएं हैं जो अपाचे कॉमन्स लाइब्रेरी का हिस्सा हैं।
// 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());
}
और अंत में जब आप की सेवा के लिए एक छवि यह नाम इसलिए दिया हैं:
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());
}
इस स्पष्ट और समझदार उत्तर के लिए आपको बहुत बहुत धन्यवाद !!! :) – OXMO456
अद्भुत, धन्यवाद। क्या आप मुझे बता सकते हैं कि बाइट सरणी उचित आउटपुट क्यों नहीं देगी, हालांकि इसे संग्रहीत किया जा रहा है आदि, मैंने कुछ समय पहले इस सवाल को देखा था http://stackoverflow.com/questions/2018597/cannot-fetch-image-data-in- gwt-google-datastore-image-is-strected-out – dhaval
उत्कृष्ट उत्तर! –