Oli*_*alo 14 playframework-2.0
我被困在一个明显的一个:
如何使用Play 2.0从控制器渲染图像?
有了1.0,有一种renderBinary()方法.它现在消失了.
Play-RC1仅定义了3种内容类型:Txt,Html和Xml ....
那么,如何从控制器中提供二进制文件?
tee*_*moo 25
在Scala中使用Play 2.x,而不是使用renderBinary()或Binary()使用juste
Ok(byteArray).as(mimeType)
Run Code Online (Sandbox Code Playgroud)
在前面的示例中,这给出了:
import play.api._
import play.api.Play.current
import play.api.mvc._
object Application extends Controller {
def index = Action {
val app = Play.application
var file = Play.application.getFile("pics/pic.jpg")
val source = scala.io.Source.fromFile(file)(scala.io.Codec.ISO8859)
val byteArray = source.map(_.toByte).toArray
source.close()
Ok(byteArray).as("image/jpeg")
}
}
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助.
这是一个Scala解决方案:
package controllers
import play.api._
import play.api.Play.current
import play.api.mvc._
object Application extends Controller {
def index = Action {
val app = Play.application
var file = Play.application.getFile("pics/pic.jpg")
val source = scala.io.Source.fromFile(file)(scala.io.Codec.ISO8859)
val byteArray = source.map(_.toByte).toArray
source.close()
Binary(byteArray, None, "image/jpeg");
}
}
Run Code Online (Sandbox Code Playgroud)
Binary是一种方法Controller,就像Ok.源代码Results.scala表明它将被删除:
/** To be deleted... */
def Binary(data: Array[Byte], length: Option[Long] = None, contentType: String = "application/octet-stream") = {
val e = Enumerator(data)
SimpleResult[Array[Byte]](header = ResponseHeader(
OK,
Map(CONTENT_TYPE -> contentType) ++ length.map(length =>
Map(CONTENT_LENGTH -> (length.toString))).getOrElse(Map.empty)),
body = e)
}
Run Code Online (Sandbox Code Playgroud)
但是没有任何关于使用什么的建议.我想如果需要,可以简单地创建一个自己的对象来做这个.
| 归档时间: |
|
| 查看次数: |
9668 次 |
| 最近记录: |