如何以akka http 10文件大小上传文件> 100 KB

时间:2017-01-25 08:28:40

标签: scala akka-stream akka-http

我有akkka http服务器(版本10.0)用于将邮件请求上传文件从邮递员到另一个服务(它连接亚马逊s3)

  1. 使用图片文件(图片大小= 275 KB),它有例外
  2.   

    akka.stream.impl.SubscriptionTimeoutException:子流源尚未在5000毫秒内实现

    1. 使用图像尺寸< 20 KB,它的工作
    2. 为什么??

      这是我的代码

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

1 个答案:

答案 0 :(得分:2)

这会对你有所帮助

将它放在application.conf文件中

100m表示100 MB

akka.http.server.parsing.max-content-length = 100m