Как проверить загрузку изображения в PlayFramework 1?

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

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

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

Спасибо!

Ответ 1

После небольшого поиска в исходном коде 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;
    }
    

    }

Ответ 2

Внедрите пользовательскую проверку, здесь образец из документации 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-file-upload-blob