2011-07-10 8 views
10

私はいくつかの条件で画像をアップロードする必要がありますPlayFramework 1で画像のアップロードを検証する方法は?

  • 寸法はXピクセルの高さ、Yピクセル幅を超えることができない、
  • サイズはディスク
  • Bバイトを超えることはできないがPNGなければなりませんまたはJPGファイル
  • 「リサイズ」する必要があります(遊びのブロブを使用して)ディスクに保存する必要があります

Siこれまでのところ、私は画像のアップロードやPlay!Frameworkのチェックに関する情報がほとんどまたはまったく見つかりませんでした。 助けを歓迎します!

ありがとうございます!

答えて

13

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

ここプレイのドキュメントからのサンプルです、カスタムチェックを実装します。

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

私は両方の記事を見てきました。ここに投稿する前に、私はちょっとした研究をしました。 ;)さらに、私の質問は「画像」アップロードの検証に向けられており、これらの2つのうちどれも質問には答えられません。 –

関連する問題