Как загрузить и снабдить изображение механизмом приложения Google (Java)

Я ищу самый простой способ загрузить и сохранить изображение (файл) к GAE (Java). Поиск с помощью Google в течение многих часов без любого простого и ясного результата.

Найденный этой ссылкой.

Но я все еще не знаю, как сохранить изображение, и как получить его. Я ищу простой пример сервлета.

69
задан Draken 9 October 2019 в 16:43
поделиться

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());
}
96
ответ дан 24 November 2019 в 13:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: