Ответ 1
Ссылка, которую вы предоставили "Как обрабатывать загрузки файлов в мое приложение?" объясняет, как вы можете загружать изображение.
Чтобы разместить изображения, вам необходимо использовать Служба хранилища данных для хранения и отображения изображения вместе с вашими другими данными.
Вот пример кода. Это подразумевается как эскиз, поскольку вы можете иметь свой собственный объект (например, бизнес, пользователь и т.д.) Для поля для изображения. Я не обращал внимания на всю обработку ошибок и восстановление, чтобы упростить код.
Объявление объекта с изображением. Вы можете представить себе другие поля, например. теги, местоположение и т.д.
@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
- это классы, которые являются частью библиотеки 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());
}
И наконец, когда вы хотите служить изображению с его именем:
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());
}