以下是来自Play文档的示例代码:
def upload = Action(parse.temporaryFile) { request =>
request.body.moveTo(new File("/tmp/picture/uploaded"))
Ok("File uploaded")
}
- 100个同时发起的慢速上传请求将如何处理(线程数)?
- 上传的文件会在内存中缓冲还是直接流式传输到磁盘上?
以下是来自Play文档的示例代码:
def upload = Action(parse.temporaryFile) { request =>
request.body.moveTo(new File("/tmp/picture/uploaded"))
Ok("File uploaded")
}
request.body.moveTo(...)
会阻塞控制器函数直到移动完成。这意味着,如果大约同时完成了100个上传中的几个,Play用于处理请求的内部ExecutionContext
可能会很快超载。在Play 2.3中,moveTo
的底层API也已被弃用,因为它使用FileInputStream
和FileOutputStream
将TemporaryFile
复制到永久位置。文档建议您改用Java 7 File API,因为它更加高效。
这可能有点粗糙,但像这样的东西应该可以:
import java.io.File
import java.nio.file.Files
def upload = Action(parse.temporaryFile) { request =>
Files.copy(request.body.file.toPath, new File("/tmp/picture/uploaded").toPath)
Ok("File uploaded")
}