我有akkka http服务器(版本10.0)用于将邮件请求上传文件从邮递员到另一个服务(它连接亚马逊s3)
akka.stream.impl.SubscriptionTimeoutException:子流源尚未在5000毫秒内实现
为什么??
这是我的代码
(post &
entity(as[Multipart.FormData])) { (formData) =>
val fileNamesFuture = formData.parts.mapAsync(1) { p =>
Future.successful(p.entity, p.name, p.filename)
}.runFold(List.empty[(BodyPartEntity, String, Option[String])])(_ :+ _)
val req = fileNamesFuture flatMap { a => createRequestUploadImage(a.find(x => x._2 == "image").get, Url, token) }
onComplete(req flatMap {
HttpService.response
}) {
case Success(data) =>
println(data)
complete("OK")
}}
制作请求方法
def createRequestUploadImage(file: (BodyPartEntity, String, Option[String]), url: String, token: Option[String] = None): Future[HttpRequest] = {
val formData =
Multipart.FormData(
Source.single(
Multipart.FormData.BodyPart(
"data",
file._1,
Map("filename" -> file._3.getOrElse("")))))
Marshal(formData).to[RequestEntity]
.map(e => HttpRequest(HttpMethods.POST, uri = url, entity = e)
.withHeaders(RawHeader("Authorization", token.getOrElse(""))))}
从其他服务获取网址(上传后)
def response(req: HttpRequest): Future[Response] = {
val connectionFlow: Flow[HttpRequest, HttpResponse, Future[Http.OutgoingConnection]] =
Http().outgoingConnection(host = req.uri.authority.host.address(), port = req.uri.effectivePort).async
for {
res <- Source.single(req).via(connectionFlow).runWith(Sink.head)
data <- Unmarshal(res.entity).to[String]
} yield (res, data)}
答案 0 :(得分:2)
这会对你有所帮助
将它放在application.conf文件中
100m表示100 MB
akka.http.server.parsing.max-content-length = 100m