Как проверить правильность загрузки изображения в PlayFramework 1? - PullRequest
11 голосов
/ 11 июля 2011

Я должен загрузить фотографии с несколькими условиями:

  • размеры не могут превышать высоту x пикселей, ширину y пикселей,
  • размер не может превышать b байт на диске
  • должен быть PNG или JPG файл
  • должен быть "изменен"
  • необходимо сохранить на диск (используя BLOB-объект воспроизведения)

До сих пор я почти не нашел информации о загрузке изображений и / или проверке Play! Framework. Любая помощь приветствуется!

Спасибо!

Ответы [ 2 ]

13 голосов
/ 11 июля 2011

После небольшого поиска в исходном коде PlayFramework я наткнулся на библиотеку ImageIO , уже использованную в Play.Не могу понять, почему такие простые проверки не были добавлены в базовую библиотеку ...

Вот часть проверки, которую я создал для:

  • проверка размеров,
  • проверка типа,
  • проверка размера.

    package validators;
    
    import java.awt.image.BufferedImage;
    import java.io.IOException;
    
    import javax.imageio.ImageIO;
    
    import play.Logger;
    import play.data.validation.Check;
    import play.db.jpa.Blob;
    import play.i18n.Messages;
    
    public class ImageValidator extends Check {
    
      public final static int MAX_SIZE = 4048;
      public final static int MAX_HEIGHT = 1920;
    
      @Override
      public boolean isSatisfied(Object parent, Object image) {
    
        if (!(image instanceof Blob)) {
            return false;
        }
    
        if (!((Blob) image).type().equals("image/jpeg") && !((Blob) image).type().equals("image/png")) {
            return false;
        }
    
        // size check
        if (((Blob) image).getFile().getLength() > MAX_SIZE) {
            return false;
        }
    
    
        try {
            BufferedImage source = ImageIO.read(((Blob) image).getFile());
            int width = source.getWidth();
            int height = source.getHeight();
    
            if (width > MAX_WIDTH || height > MAX_HEIGHT) {
                return false;
            }
        } catch (IOException exption) {
            return false;
        }
    
    
        return true;
        }
    }
    
1 голос
/ 11 июля 2011

Реализация пользовательской проверки, вот пример из документации Play:

public class User {

    @Required
    @CheckWith(MyPasswordCheck.class)
    public String password;

    static class MyPasswordCheck extends Check {

        public boolean isSatisfied(Object user, Object password) {
            return notMatchPreviousPasswords(password);
        }

    }
}

А вот ссылка на отличный пост от Lunatech по загрузке файлов с помощью Play: http://www.lunatech -research.com /playframework-файлы для загрузки-блоб

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...