Play 2.0 用户指南 - 文件上传 -- 针对Scala开发者

原创
2012/03/26 18:28
阅读数 913

    处理文件上传

    在form中指定multipart/form-data属性上传文件

    上传文件的标准方式是指定form的一个特殊属性 multipart/form-data ,可以让你混合表单数据和表单文件附件。

    开始编写HTML表单:
@form(action = routes.Application.upload, 'enctype -> "multipart/form-data") {
    
    <input type="file" name="picture">
    
    <p>
        <input type="submit">
    </p>
    
}

    定义 upload action,使用 multipartFormData body parser:
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"
    )
  }
}


    ref 给予你一个指向 TemporaryFile 的引用。这是 mutipartFormData parser 处理文件上传的基本方式。

    注意:你也可以使用 anyContent body parser 并以request.asMultipartFormData取出内容。

直接上传文件

    另一种方式是使用ajax上传文件。这种情况下,form不需要设置编码为 multipart/form-data。
    这种情况下,我们只需要使用一个 body parser 將 request body 保存到一个文件中。例如,我们使用 temporaryFile body parser:
   
def upload = Action(parse.temporaryFile) { request =>
  request.body.moveTo(new File("/tmp/picture"))
  Ok("File uploaded")
}

    自定义 body parser

    如果你想直接处理上传的文件,而不是放入临时文件中缓冲,那么你需要编写自定义的 body parser。这种情况下,你將接到数据块,放于任何你期望的地方。

    如果你想使用 multipart/form-data 编码,你仍然可以使用默认的 mutipartFormData parser并提供自定义的PartHandler[FilePart[A]]。
展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部