Scala 播放框架:使用任何内容类型的WS.put(可能使用byteArray?)向WS发送request.body

Scala 播放框架:使用任何内容类型的WS.put(可能使用byteArray?)向WS发送request.body,scala,playframework,playframework-2.0,Scala,Playframework,Playframework 2.0,我有一个api端点,它接收文件的put请求,对其进行身份验证,并将经过身份验证的请求发送到远程web服务器端点。我使用play的WS对象进行远程put文件调用,如下所示。我尝试使用request.get.asBytes,它编译得很好,但远程服务器收到一个空文件 def putFile(location:String, key:String) = Action.async { request => val MAXCHUNKSIZE=10000000 val pa

我有一个api端点,它接收文件的put请求,对其进行身份验证,并将经过身份验证的请求发送到远程web服务器端点。我使用play的WS对象进行远程put文件调用,如下所示。我尝试使用request.get.asBytes,它编译得很好,但远程服务器收到一个空文件

def putFile(location:String, key:String) = Action.async {
   request =>
      val MAXCHUNKSIZE=10000000
      val path= getPath(location,key)
      val stringToSign= getStringToSign(location, key)
      val rawBody=request.body.asRaw
      val bodBytes = rawBody flatMap { x: RawBuffer => x.asBytes(MAXCHUNKSIZE) } getOrElse(Array.empty[Byte])
      println("Request bodybytes: "+bodBytes.isEmpty)

      val result = WS.url(path)
        .withHeaders("Date" -> formattedDate,  "Authorization" -> authStr(stringToSign), "Content-length" -> request.headers.get("Content-Length").toString, "Content-Type"->request.headers.get("Content-Type").getOrElse("application/octet-stream"))
        .put(bodBytes) map { response =>
      println("Response: "+response.body)
      Status(response.status)(response.body).as(response.ahcResponse.getContentType)
   }
   result
}
我必须承认,我是一名Java开发人员,对scala和play非常陌生(1个月),最后一个map函数是我的同事给我的。我不能完全理解它。任何帮助都将不胜感激(1)

调试println消息的结果是,对于非空的文本文件,bodBytes.isEmpty为true。任何帮助都将不胜感激(2)

如果我硬编码一个字符串来代替bodBytes,它会工作并且似乎会发送请求,但是有一个问题。它试图打印response.body,但似乎在等待。而该文件已上载到服务器。任何帮助都将不胜感激(3)

我使用的测试文件只是一个简单的Lorem ipsum文件,不超过400字节。我之所以使用asRaw,是因为它可以是图像、xml文件等。如果您对scala代码有任何帮助,我将不胜感激