如何在Play应用程序中访问上载的JSON文件的内容

时间:2016-06-05 22:09:02

标签: json scala playframework playframework-2.0 httprequest

我想使用Play应用程序/ api将JSON文件的内容上传到我的数据库。

我的HTML视图如下所示:

@main("Welcome to Play") {
    <h1> Upload a JSON file </h1>
    @helper.form(action = routes.Application.upload, 'enctype -> "text/json") {
        <input type="file" name="jsonFile">
        <p>
            <input type="submit" value="Upload">
        </p>
    }
}

upload view

我在控制器中定义了我的上传方法。理想情况下,我想将内容上传到Cassandra,但首先我必须访问文件本身的内容。

def upload = Action { request =>
  val data = request.body.asJson  /  toString
  Ok("Got: " + data)
}

我分别得到(asJson或toString)

Got: None   /  Got: AnyContentAsFormUrlEncoded(Map(jsonFile -> ArrayBuffer(file.json)))

file.json的格式为:

[{ "name": "alice", "age": 22}, { "name": "bob", "age": 23}]

我已经验证它在JSON lint中格式正确。基本上我似乎无法从文件中正确提取内容。

1 个答案:

答案 0 :(得分:2)

这是因为您没有使用Content-Type application/json进行请求,因此请求body / payload不是JSON。您实际上是在使用multipart/form-data Content-Type进行文件上传(这不是文件上传,因为您没有使用application/x-www-form-urlencoded)(您可以通过使用浏览器检查员)。

以下是您需要做的事情:

  1. 如果您希望用户使用网络表单提交文件,请执行适当的file upload
  2. 阅读文件内容并将其发送给Cassandra。