2016-12-08 15 views
0

で画像を保存、私は数日前にGrailsで働き始めました、今私は問題抱えている:あなたは、私が作成しようとしている見ることができるようにだからグルーヴィー

class Activity { 

    String title 
    String description 
    String category 
    String tags 
    String priority 

    //<?> image <- 
    User owner 

    static hasMany = [tis: TimeInvested] 

    static constraints = { 
    title unique: true 
    category nullable: true, inList : ["Trabalho", "Lazer"] 
    tags nullable: true 
    description nullable: true 
    priority nullable: true, inList :["Alta", "Media", "Baixa"] 
    } 

    Double getInvestedHours(){ 
    def soma = 0.0d 
    this.tis.each { 
     soma += it.hours 
    } 
    soma 
    } 

    String toString() { 
    title 
    } 
} 

をいくつかのプロパティを持ち、これは画像ですが、私はこのタイプの画像をどのタイプで保存しているのか分かりません。また、私はこのように、htmlページから値を取得しようとしている:

<form class="form-inline povmt-form" action="${createLink(controller: 'Activity', action: 'save')}" method="POST"> 
 
    <div class="form-group"> 
 
    <input type="hidden" name="owner.id" value="${session.user.id}"> 
 
\t <div class="input-group" style="width: 100%"> 
 
\t <div class="input-group-addon" style="width: 30%">Titulo</div> 
 
\t <input type="text" name="title" class="form-control" placeholder="Titulo" required> 
 
    </div> 
 
    <div class="input-group" style="width: 100%"> 
 
    <div class="input-group-addon" style="width: 30%">Descrição</div> 
 
    <input type="text" name="description" class="form-control" placeholder="Descrição"> 
 
    </div> 
 
    <div class="input-group" style="width: 100%"> 
 
\t <div class="input-group-addon" style="width: 30%">Imagem</div> 
 
\t <input type="file" name="image" class="form-control" accept="image/*" capture="camera"> 
 
    </div> 
 
    <div class="input-group" style="width: 100%"> 
 
    <div class="input-group-addon" style="width: 30%">Categoria</div> 
 
\t <g:select name="category" class="form-control" from="${['Trabalho', 'Lazer']}"/> 
 
    <!-- <select name="" id=""></select> --> 
 
    </div> 
 
    <div class="input-group" style="width: 100%"> 
 
    <div class="input-group-addon" style="width: 30%">Prioridade</div> 
 
\t <g:select name="priority" class="form-control" from="${['Alta', 'Media', 'Baixa']}"/> 
 
    </div> 
 
    <div class="input-group" style="width: 100%; display: none"> 
 
    <div class="input-group-addon" style="width: 30%">Tags</div> 
 
    <input type="text" name="tags" class="form-control" placeholder="Tags"> 
 
    </div> 
 
    <input type="submit" class="btn btn-primary btn-lg" value="Adicionar atividade" style="width: 100%; margin-top: 40px;"> 
 
    </div> 
 
</form>

は、私は、フォームから画像を取得する方法の任意のアイデアを持って、あなたたちですかhtmlページを開き、Groovy変数に保存して新しいアクティビティを作成しますか?私はウェブ開発で本当に初心者なので、どんな助けも歓迎です。

P.S:英語は私の母国語ではありませんので、間違いはありません。

答えて

1

私が通常行っていることは、イメージをAmazon S3のような別のストレージにアップロードすることです。 URL、キーオブジェクトID、名前などの画像の詳細を保存するためのドメインクラスを作成できます。次に、Activityクラスで画像オブジェクトを参照します。コンベンションでgrailsでコントローラはActivityController.groovyのように名前をつけるべきです。 Activity.groovyは一般にドメインクラスを指します。また、入力を取得し、それを検証するために、ActivityCommandのようなコマンドクラスを使用します。このコマンドクラスは、コントローラクラス内にあることができます。

// Activity.groovy (domain) 
class Activity { 
    Image image 
    // .. 
} 

// Image.groovy (domain) 
class Image { 
    // ... 
    String name 
    String objId 
    String url 
    // .. 
} 

あなたは<g:uploadForm>を使用して、それで<input type="file" name="image">を持つことができます。

// ActivityController.groovy 
// .. 
def save() { 
    def file = request.getFile('image') //MultipartFile (spring) 
    byte[] ba = file.getBytes() 
    // call S3 upload service ... which will return the Image object. 
    activityService.save(/*params which includes the image object*/) 
} 

// ActivityService.groovy 
// .. 
def saveActivity(Image img, /* .. */) { 
    Activity a = new Activity() 
    a.setImage(img) 
    // .. 
    a.save() // saves to DB 
} 
+0

私はの内に置くん:その後、あなたのコントローラ内でのような画像を得る '// Image.groovy(ドメイン) クラスイメージ{ // ...} ' 申し訳ありませんが、理解できません。 – Erick

+0

Erick:オブジェクトストアに関する必要な情報を追加して、s3 url、ファイル名などのように後でイメージを取得できるようにすることができます。 – boring

関連する問題