我在使文件上传工作正常时遇到一些问题,以下代码无法编译。
错误:overloaded method constructor File with alternatives: (java.net.URI)java.io.File <and> (java.lang.String)java.io.File cannot be applied to (play.api.mvc.MultipartFormData.FilePart[play.api.libs.Files.TemporaryFile])
代码:
def csvimport = Action(parse.multipartFormData) { request =>
request.body.file("files[]").map { rawfile =>
val filename = rawfile.filename
val contentType = rawfile.contentType
val tmpFile = new File(rawfile)
val reader = new CSVReader(new FileReader(tmpFile))
Ok
}
.getOrElse {
Logger.debug(request.body.toString)
BadRequest
}
}
在运行CSVReader之前,是否需要暂时将文件存储到磁盘?有没有办法将原始文件上传转换为内存中的新File
类?
谢谢!
答案 0 :(得分:1)
我想你想要实现的目标
https://stackoverflow.com/a/11059295/317452
https://gist.github.com/2939230
这会逐步解析文件的块,而不会将整个原始文件放在内存或磁盘上。
答案 1 :(得分:0)
有同样的问题:
尝试:
request.body.file("Image").ref.file // Java.io.File
request.body是play.api.mvc.MultipartFormData
request.body.file(“Image”)。ref是play.api.libs.Files.TemporaryFile here:https://www.playframework.com/documentation/2.0/api/scala/play/api/libs/Files $$ TemporaryFile.html