2011-07-10 61 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

我已經看到了這兩個職位。在發佈之前,我已經做了一些研究,你知道。 ;)另外,我的問題顯然是針對「圖片」上傳驗證,而這兩者都不以任何方式回答我的問題。 –