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