如何在Spray/Scala/Java中处理通过HTML表单上传的文件?

amp*_*dre 8 post scala file-upload httprequest

我有一个使用Spray编写的应用程序,我有一个页面,其中有一个<input type="file" name="foo">表单元素可以POST到/fileUpload.

我有一个Spray路由设置为/fileUpload使用此代码侦听路径:

path("fileUpload") {
  get { ctx => {
    val request: HttpRequest = ctx.request
    //Process the file, somehow with request?
    ctx.complete("File Uploaded")
  }}
}
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚如何获取POST主体并获取文件的句柄,我在网上找不到任何示例.

必须可以接收文件并使用Spray或甚至通过简单的Scala或Java处理它,但我不知道该怎么做.

有人可以帮忙吗?
谢谢!

iwe*_*ein 9

虽然我还没有检查流媒体是否正常工作,但它可以使用Spray.我摆弄了一下,让这个工作:

  post {
    content(as[MultipartFormData]) {
      def extractOriginalText(formData: MultipartFormData): String = {
        formData.parts.mapValues { (bodyPart) =>
          bodyPart.content.map{
            (content) => new String(content.buffer)
          }
        }.values.flatten.foldLeft("")(_ + _)
      }
      formData =>
        _.complete(
          extractOriginalText(formData)
        );
    }
Run Code Online (Sandbox Code Playgroud)

如果您将纯文本文件上载到其中包含此代码的服务,则会咳嗽原始文本.我已经将它与ajax上传一起运行了; 它也应该与旧式文件上传表单一起使用.

在我看来,必须有一个更简单的方法来做到这一点,特别是内容的深度嵌套相当笨重.如果您发现简化,请告诉我.

更新(thx akauppi):

entity(as[MultipartFormData]) { formData => 
  complete( formData.fields.map { _.entity.asString }.flatten.foldLeft("")(_ + _) ) 
}
Run Code Online (Sandbox Code Playgroud)