Files
Soulstorm-tournament-decider/app/controllers/MapImageController.scala
T

39 lines
1.2 KiB
Scala

package controllers
import java.io.File
import javax.inject.{Inject, Singleton}
import play.api.mvc.{AbstractController, ControllerComponents}
import repository.MapImageRepository
import scala.concurrent.ExecutionContext
/**
* Раздаёт картинки карт из каталога, заданного в конфиге (`maps.imagesDir`).
*
* Нужен потому, что каталог может находиться вне `public`/`app/assets`
* (например, на сервере), и стандартный Assets его не отдаст.
*/
@Singleton
class MapImageController @Inject()(cc: ControllerComponents) extends AbstractController(cc) {
implicit val ec: ExecutionContext = cc.executionContext
def image(file: String) = Action { implicit request =>
MapImageRepository.findFile(file) match {
case Some(image) =>
Ok.sendFile(image, inline = true)
.as(contentType(image))
.withHeaders(CACHE_CONTROL -> "public, max-age=86400")
case None => NotFound
}
}
private def contentType(file: File): String = {
val name = file.getName.toLowerCase
if (name.endsWith(".png")) "image/png"
else if (name.endsWith(".webp")) "image/webp"
else "image/jpeg"
}
}