1

我正在尝试提供来自play-mini应用程序的图像。

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]]
4

2 回答 2

4

不知道play-mini,但是play20里面有预定义Writeable[Array[Byte]]的,所以你需要提供Array[Byte]文件处理。此外,还有一些关于play20.

于 2012-03-29T11:26:10.280 回答
0

我遇到了同样的问题,并且一直挠头将近一个星期。原来对我有用的解决方案是我的控制器类中的以下代码:

    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/photos”中,不一定是 assets 文件夹。希望这可以帮助某人:-)

于 2018-11-27T08:39:47.423 回答