app/controllers/ImageBinaryController.scala (32 lines of code) (raw):

package controllers import scala.concurrent.ExecutionContext.Implicits.global import scala.concurrent.Future import play.api._ import play.mvc.Controller import play.api.mvc.Results.NotFound import play.api.mvc.{Action, Result, ResponseHeader} import play.api.libs.iteratee.Enumerator import play.api.http.HttpEntity import java.io.ByteArrayInputStream import domain.image.ImageRepository import akka.util.ByteString /** 画像のバイナリデータを返すコントローラー */ class ImageBinaryController extends Controller { /** idを受け取り画像のバイナリデータを返す */ def image(id: Long) = Action.async { request => ImageRepository.image(id).map { case Some(image) => { image.bin match { case Some(bin) => { /** bin: Array[Byte] */ Result( header = ResponseHeader(200), body = HttpEntity.Strict(ByteString.fromArray(bin), Some("image/png")) ).withHeaders( "Cache-Control" -> "max-age=3600" ) } case None => NotFound("Not Found") } } case None => NotFound("Not Found") } } }