getImage is a controller action, getPictureBytes just reads a file and returns it as a byte array.
def getImage(String filename) { def bytes = getPictureBytes(filename) response.setContentType('image/jpeg'); response.outputStream << bytes } private getPictureBytes(String filename) throws FileNotFoundException { def bytes try { bytes = new File(grailsApplication.config.picturePath + filename).readBytes() } catch (FileNotFoundException e) { // If an assigned file was not found, still attempt to return a default image. def context = grailsAttributes.getApplicationContext() bytes = context.getResource("/images/default-image.jpg").getFile().readBytes() } bytes }