Akka 文件上传 - 在收到请求结束前发送 2xx 'early' 响应
Akka file upload - Sending an 2xx 'early' response before end of request was received
我知道这里已经有人问过这个问题了,但我还没有找到任何可行的解决方案。一直收到此警告:在收到请求结束之前发送 2xx 'early' 响应。
这是我的代码:
pathPrefix("upload") {
(post & extractRequest) { _ => {
extractRequestContext {
requestCtx => {
println(requestCtx.request.toString)
implicit val materializer = requestCtx.materializer
implicit val executionContext = requestCtx.executionContext
fileUpload("file") {
case (metadata, byteSource) => {
val completesOnceUploadCompleted: Future[Done] =
byteSource.runWith(FileIO.toPath(Paths.get(metadata.fileName))).map(
iores => iores.status.get
)
val futureResponseBody = completesOnceUploadCompleted.map(res => res)
complete(futureResponseBody)
}
}
}
}
}
}
}
请帮我解决一下。
我不确定潜在问题的原因。然而,一个 "quick fix" 是使用 onComplete
指令等待写入完成:
pathPrefix("upload") {
post {
extractRequestContext { requestCtx =>
println(requestCtx.request.toString)
implicit val materializer = requestCtx.materializer
implicit val executionContext = requestCtx.executionContext
fileUpload("file") { (metadata, byteSource) =>
val writeFileFut : Future[Try[Done]] =
byteSource.runWith(FileIO.toPath(Paths.get(metadata.fileName)))
.map(_.status)
onComplete(writeFileFut) {
case Success(statusTry) => statusTry match {
case Success(done) => complete(StatusCodes.Ok)
case Failure(ex) => complete(StatusCodes.InternalServerError -> ex.toString)
}
case Failure(ex) => complete(StatusCodes.InternalServerError -> ex.toString)
}
}
}
}
}
我遇到了同样的问题,只需添加 implicit request: Request[AnyContent] =>
(我不小心将其删除)即可解决!
我知道这里已经有人问过这个问题了,但我还没有找到任何可行的解决方案。一直收到此警告:在收到请求结束之前发送 2xx 'early' 响应。
这是我的代码:
pathPrefix("upload") {
(post & extractRequest) { _ => {
extractRequestContext {
requestCtx => {
println(requestCtx.request.toString)
implicit val materializer = requestCtx.materializer
implicit val executionContext = requestCtx.executionContext
fileUpload("file") {
case (metadata, byteSource) => {
val completesOnceUploadCompleted: Future[Done] =
byteSource.runWith(FileIO.toPath(Paths.get(metadata.fileName))).map(
iores => iores.status.get
)
val futureResponseBody = completesOnceUploadCompleted.map(res => res)
complete(futureResponseBody)
}
}
}
}
}
}
}
请帮我解决一下。
我不确定潜在问题的原因。然而,一个 "quick fix" 是使用 onComplete
指令等待写入完成:
pathPrefix("upload") {
post {
extractRequestContext { requestCtx =>
println(requestCtx.request.toString)
implicit val materializer = requestCtx.materializer
implicit val executionContext = requestCtx.executionContext
fileUpload("file") { (metadata, byteSource) =>
val writeFileFut : Future[Try[Done]] =
byteSource.runWith(FileIO.toPath(Paths.get(metadata.fileName)))
.map(_.status)
onComplete(writeFileFut) {
case Success(statusTry) => statusTry match {
case Success(done) => complete(StatusCodes.Ok)
case Failure(ex) => complete(StatusCodes.InternalServerError -> ex.toString)
}
case Failure(ex) => complete(StatusCodes.InternalServerError -> ex.toString)
}
}
}
}
}
我遇到了同样的问题,只需添加 implicit request: Request[AnyContent] =>
(我不小心将其删除)即可解决!