Scala Akka HTTP服务器接收带有其他字段的文件

Scala Akka HTTP服务器接收带有其他字段的文件,scala,file-upload,multipartform-data,akka-http,Scala,File Upload,Multipartform Data,Akka Http,我已经创建了一个小型Akka HTTP服务器来接收上传的文件 path("upload"){ uploadedFile("csv"){ case (metadata, file) =>{ println("file received " + file.length() ); complete("hahahah") } } } 我可以成功接收文件,但无法访问此POST请求中的其他字段。字段“cs

我已经创建了一个小型Akka HTTP服务器来接收上传的文件

path("upload"){
    uploadedFile("csv"){
        case (metadata, file) =>{
            println("file received " + file.length() );
            complete("hahahah")
        }
    }
}

我可以成功接收文件,但无法访问此POST请求中的其他字段。字段
“csv”
包含要上载的文件,而另一个字段
“name”
包含用户定义的名称。我无法访问
“name”
中的数据。有谁能给我一些关于如何获取它的线索吗?

您可以使用
fromFields('user)
获取用户名。但不幸的是,您将遇到此异常:
java.lang.IllegalStateException:子流源不能被物化多次
这是一个已知问题:

作为解决方法,您可以使用
ToStrictenty
指令:

 toStrictEntity(3.seconds) {
   formFields('user) { (user) =>
     uploadedFile("csv") {
       case (metadata, file) => {
         println(s"file received by $user" + file.length())
           complete("hahahah")
         }
       }
     }
   }
 }
我认为这不是一个好主意,因为您将把整个请求实体读入内存,如果您有一个小实体,它就会工作

作为更好的解决方案,您可以实现自己的
uploadedFile
指令,该指令将从多部分表单数据中提取所需的部分和字段,请参见
uploadedFile
源代码作为示例: