我试图获取上载文件的内容(使用POST),而不必创建/复制此文件到本地目录。在scala
中有什么可能吗?
这是我的代码:
def uploadSchema = Action(parse.multipartFormData) { request =>
request.body.file("source").map { sourceFile =>
val filename = Paths.get(sourceFile.filename).getFileName
sourceFile.ref.moveTo(Paths.get(s"/usr/local/polymer/schema/uploads/$filename"), replace = true)
Ok(s"Uploaded successfully!"+sourceFile.)
}.getOrElse {
Redirect(routes.NLPController.uploadSchema).flashing("error" -> "Missing file.")
}
我想做的是,而不是做
sourceFile.ref.moveTo(Paths.get(s"/usr/local/polymer/schema/uploads/$filename"), replace = true)
做类似的事情
val content : String = Source.fromFile(file).getLines.mkString
这是我的API
文件中的routes
POST /api/upload controllers.NLPController.uploadSchema
这可能吗?如果没有,为什么?
答案 0 :(得分:1)
您说的是要执行以下操作:
这里的问题是,文件应该放在哪里?如果我在服务器上有一个应用程序,并且使用此方法上传文件,则该文件将始终始终位于服务器上。因为应该先将其复制到某个位置,然后再将其移动到其他位置(云,另一个备份服务器)。
如何读取文件内容?
这是另一个问题,与上传无关,而不是读取文件内容,您可以这样做:
import scala.io.Source
val myFileContent = Source.fromFile("myFile.txt").getLines.mkString
更新说明
好吧,您是在评论中说,您拥有要获取文件内容的应用程序A,然后将其发送到应用程序B。那么为什么不这样做:
带有查询字符串的路由:具有一个将文件路径作为查询字符串获取的路由:
GET /file-content controllers.file.readContent (path: String)
然后您像这样调用应用程序:
/file-content?path=whereever/i-want/myfile-be.txt
读取内容并将其放入响应的方法:然后在您的readContent
方法中,将文件的正文返回给调用应用程序A的任何人:
def readContent (filePath: String) = Action{
implicit request =>
Ok(Source.fromFile(filePath).getLines.mkString))
}
更新说明2:请不要忘记安全性!
上述解决方案可以很好地读取数据,并将其返回。但是,您还应该考虑安全性。您不想将文件的内容提供给调用该URL的任何人。您可以在调用者应用程序中添加令牌,这样处理数据内容的应用程序将首先检查用户是否被授权,然后检查文件的内容。