uris77
8/20/2013 - 3:11 AM

Grails Upload example

Grails Upload example

package org.uris.potholes.web.controllers

import org.uris.potholes.images.ImageReaderService
import org.uris.potholes.models.Pothole

import javax.imageio.ImageIO
import java.awt.image.BufferedImage


class UploadPotholeImageController {

    ImageReaderService imageReaderService
    private final static String PICTURES_DIR = "/usr/local/code/grails/potholes/pictures"

    def index() {
    }

    def process() {
        def file = request.getFile('picture')
        if(isEmpty(file)) return
        if(isInvalidFile(file)) return

        def picDirs = new File(PICTURES_DIR)
        if(!picDirs.exists()) {
            picDirs.mkdirs()
        }
        File imageFile = new File(picDirs, file.originalFilename)
        file.transferTo(imageFile)
        Pothole pothole = imageReaderService.saveImage(imageFile)
        [pothole: pothole]
    }



    private boolean isInvalidFile(def file) {
        def invalid = false
        def okcontents = ['image/png', 'image/jpeg', 'image/gif']
        if (! okcontents.contains(file.getContentType())) {
            flash.message = "Picture must be one of: ${okcontents}"
            redirect action: 'index'
            invalid = true;
        }
        invalid
    }

    private boolean isEmpty(def file){
        def empty = false
        if(file.empty){
            flash.message = 'File cannot be empty'
            redirect(action: 'index')
            empty = true
        }
        empty
    }
}