我正在尝试从play迷你应用程序提供图像。
object App extends Application {
def route = {
case GET(Path("/image")) => Action { request =>
Ok( Source.fromInputStream(getClass.getResourceAsStream("image.gif")).toArray ).as("image/gif")
}
}
}
不幸的是,这不起作用:)我得到以下错误
Cannot write an instance of Array[Char] to HTTP response. Try to define a Writeable[Array[Char]]
不知道play-mini
,但在play20
中有预定义的Writeable[Array[Byte]]
,因此需要提供Array[Byte]
用于文件处理。此外,还有一些关于在play20
中提供文件的文档。
我也遇到了同样的问题,几乎一个星期都在挠头。事实证明,对我有效的解决方案是我的控制器类中的以下代码:
def getPhoto(name: String) = Action {
val strPath = Paths.get(".").toAbsolutePath.toString() + "/public/photos/" + name
val file1: File = strPath
.toFile
val fileContent: Enumerator[Array[Byte]] = Enumerator.fromFile(new java.io.File(file1.path.toString))
Ok.stream(fileContent).as("image/jpeg")
}
路线定义如下:
GET /photos/:name controllers.myController.getPhoto(name)
因此,键入带有照片扩展名的URL会在浏览器上显示照片,如下所示:http://localhost:9000/photos/2018_11_26_131035.jpg
图像保存在应用程序根文件夹中的文件夹"public/photes"中,而不一定保存在资产文件夹中。希望这能帮助到某人:-)