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

    处理文件上传

    在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]]。

转载于:https://my.oschina.net/dongming/blog/51090

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值