2011-07-10 108 views
10

我不得不用几个条件上传图片:如何验证PlayFramework 1中的图片上传?

  • 尺寸不能超过x像素高度,Y像素宽度,
  • 大小不能超过在磁盘上
  • b字节必须是一个PNGJPG文件
  • 必须被“调整”
  • 必须被保存到磁盘(使用剧中的BLOB)

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

谢谢!

回答

13

在PlayFramework的搜索过了一会儿源代码,我偶然发现了Play中已经使用的ImageIO库。无法理解,为什么这种简单的检查还没有被添加到核心库...

下面是检查的一部分,我为创建:

  • 尺寸检查,
  • 类型检查,
  • 尺寸检查。

    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

实现自定义的检查,这里是从播放的文件样本:

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在文件上传与播放的链接: http://www.lunatech-research.com/playframework-file-upload-blob

+0

我已经看到了这两个职位。在发布之前,我已经做了一些研究,你知道。 ;)另外,我的问题显然是针对“图片”上传验证,而这两者都不以任何方式回答我的问题。 –