16

我试图让用户将照片上传到服务器然后查看它们。上传按照本指南中的说明进行。这是代码:

def upload = Action(parse.multipartFormData) { request =>
  request.body.file("picture").map { picture =>
    import java.io.File
    val filename = picture.filename 
    val contentType = picture.contentType
    picture.ref.moveTo(new File("/tmp/picture"))
    Ok("File uploaded")
  }.getOrElse {
    Redirect(routes.Application.index).flashing(
      "error" -> "Missing file"
    )
  }
}

我不清楚如何将上传的图像提供给想要查看它们的用户。现在我将服务器托管在我自己的机器上,因此指南中的代码片段将文件写入我的 D: 驱动器,该驱动器不能(也不应该)从 Internet 获得。据我所知,有两种选择:

  1. 将照片存储在我的项目中的 /public 文件夹下(专用于资产的文件夹)。见这里:http ://www.playframework.org/documentation/2.0/Assets

  2. 编写我自己的控制器,从我的驱动器中为自定义位置提供图像。

对于 1,我不确定这是否是资产的目的。对于 2,我不知道如何编写这样的控制器。

4

3 回答 3

18

简单的例子是

def index = Action {
  Ok.sendFile(new java.io.File("/tmp/fileToServe.pdf"))
}

https://www.playframework.com/documentation/2.4.x/ScalaStream#Serving-files有“服务文件”部分,它解释了如何提供文件

于 2012-08-10T18:07:28.390 回答
9

2.0.3 将具有一个可能(误)用于此的外部资产控制器。不过,编写这样的控制器并不神奇,您有预定义的文件夹,所有上传的内容都保存在该文件夹中,您可以从那里读取它们。在数据库中保存(唯一)文件名。

另一种方法是将上传的文件保存在数据库中。我们使用 MongoDB 中的GridFS来实现这一点。自定义控制器将它们返回给用户。这样,您的数据将存储在一个中央位置,这也使备份和恢复更加简单。

于 2012-07-12T12:40:49.447 回答
0

您可以像这样添加新路线:

GET     /myFiles/*file               controllers.Assets.at(path="/tmp", file)
于 2013-01-29T10:32:48.287 回答