我正在尝试允许用户将照片上传到服务器然后查看它们。按照in this guide所述进行上传。这是代码:
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上获得。据我所知,有两种选择:
将照片存储在项目中的/ public文件夹下(专用于资源的文件夹)。见这里:http://www.playframework.org/documentation/2.0/Assets
编写我自己的控制器,从我的驱动器中提供自定义位置的图像。
对于1,我不确定这是否是资产的目的。 对于2,我不知道如何编写这样的控制器。
答案 0 :(得分:18)
简单的例子是
def index = Action {
Ok.sendFile(new java.io.File("/tmp/fileToServe.pdf"))
}
https://www.playframework.com/documentation/2.4.x/ScalaStream#Serving-files处有“服务文件”部分,其中介绍了如何提供文件
答案 1 :(得分:9)
2.0.3将以external Assets controller为特色,可能(错误)用于此目的。编写这样一个控制器并不神奇,你有预定义的文件夹来保存所有上传文件,这就是你从中读取它们的地方。在数据库中保存(唯一)文件名。
另一种方法是将上传的文件保存在数据库中。我们在MongoDB中使用GridFS执行此操作。自定义控制器将它们提供给用户。这样,您的数据就存储在一个中心位置,这也使备份和恢复更加简单。
答案 2 :(得分:0)
您可以添加如下新路线:
GET /myFiles/*file controllers.Assets.at(path="/tmp", file)