Как загрузить файл в акка http 10 размер файла › 100 КБ

У меня есть http-сервер akkka (версия 10.0) для запроса загрузки файла с почтальона на другую службу (он подключает amazon s3)

  1. используйте файл изображения (размер изображения = 275 КБ), и у него есть исключение

akka.stream.impl.SubscriptionTimeoutException: источник подпотока не материализовался за 5000 миллисекунд

  1. используйте размер изображения ‹ 20 КБ, это работает

Почему ??

это мой код

(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(""))))}

получить URL (после загрузки) из другого сервиса

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)}

person Veerapat Boonvanich    schedule 25.01.2017    source источник


Ответы (1)


Это поможет вам

Поместите это в свой файл application.conf

100 м означает 100 МБ

akka.http.server.parsing.max-content-length = 100m
person Dhirendra    schedule 25.01.2017
comment
Я использую toStrict(), и у меня это работает, спасибо за ответ - person Veerapat Boonvanich; 21.03.2017