问题 如何在PlayFramework 1中验证图片上传?


我必须上传一些条件的照片:

  • 尺寸不能超过x像素高度,y像素宽度,
  • 大小不能超过 b 磁盘上的字节数
  • 必须是一个 PNG 或者a JPG 文件
  • 必须“调整大小”
  • 必须保存到磁盘(使用播放的Blob)

到目前为止,我发现很少或根本没有关于图像上传和/或检查Play!Framework的信息。 欢迎任何帮助!

谢谢!


9762
2017-07-10 23:11


起源



答案:


在PlayFramework的源代码中搜索了一下后,我偶然发现了 的ImageIO ibrary已在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;
        }
    }
    

13
2017-07-11 09:24





实现自定义检查,这是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


1
2017-07-10 23:55



我看过这两个帖子。在发布之前,我已经做了一些研究,你知道。 ;)另外,我的问题显然是面向“图像”上传验证,而这两者都没有,以任何方式回答我的问题。 - i.am.michiel


答案:


在PlayFramework的源代码中搜索了一下后,我偶然发现了 的ImageIO ibrary已在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;
        }
    }
    

13
2017-07-11 09:24





实现自定义检查,这是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


1
2017-07-10 23:55



我看过这两个帖子。在发布之前,我已经做了一些研究,你知道。 ;)另外,我的问题显然是面向“图像”上传验证,而这两者都没有,以任何方式回答我的问题。 - i.am.michiel