Hi,

In the application that I am working on I need to pass content of the uploaded 
via HTTP files to Java library that accepts InputStreams. I am trying to use 
new StreamConvertes.asInputStream method from akka-http 2.0.1 (akka 2.3.11) 
However the server always responds with timeouts. I wonder if I am using this 
functionality correctly.

Here is very simple application that shows the problem 
(https://gist.github.com/kostya-sh/70f4b6561ee908604050#file-mysandboxakkahttpserver-scala):

import java.nio.file.Files
import scala.concurrent.duration._
import akka.actor.ActorSystem
import akka.http.scaladsl.Http
import akka.http.scaladsl.model.Multipart
import akka.http.scaladsl.server.Directives._
import akka.http.scaladsl.server.RouteResult.route2HandlerFlow
import akka.stream.ActorMaterializer
import akka.stream.scaladsl.StreamConverters
import java.nio.file.CopyOption
import java.nio.file.StandardCopyOption

object MySandboxAkkaHttpServer extends App {
  implicit val system = ActorSystem()
  implicit val materializer = ActorMaterializer()
  implicit val executor = system.dispatcher

  val route = encodeResponse {
    (post & path("test") & entity(as[Multipart.FormData])) { entity =>
      complete {
        val sources = entity.parts.map(e => e.entity.dataBytes)
        val f = sources.runForeach { source =>
          val tmp = Files.createTempFile("a", "b")
          println(s"writing to $tmp")
          val inputStream = 
source.runWith(StreamConverters.asInputStream(5.second))
          Files.copy(inputStream, tmp, StandardCopyOption.REPLACE_EXISTING)
          Files.delete(tmp)
        }
        f.map(_ => "ok")
      }
    }
  }

  Http().bindAndHandle(route, "0.0.0.0", 7777)
}

When testing it with curl (curl -F"[email protected]" -F"[email protected]" 
http://localhost:7777/test) I always get timeout (full stack trace at 
https://gist.github.com/kostya-sh/70f4b6561ee908604050#file-stack-trace)

writing to C:\Users\user\AppData\Local\Temp\a8494608437979025074b
2016-01-08 12:15:44,462 - [ERROR] - [akka.actor.ActorSystemImpl] [undefined] 
[default-akka.actor.default-dispatcher-8] - Error during processing of request 
HttpRequest(HttpMethod(POST),http://localhost:7777/test,List(User-Agent: 
curl/7.30.0, Host: localhost:7777, Accept: */*, Expect: 
100-continue),HttpEntity.Default(multipart/form-data; 
boundary=----------------------------0e5cabf20511; 
charset=UTF-8,22500,akka.stream.scaladsl.Source@ece5b80),HttpProtocol(HTTP/1.1))
java.io.IOException: Timeout on waiting for new data
        at 
akka.stream.impl.io.InputStreamAdapter$$anonfun$read$1.apply$mcI$sp(InputStreamSinkStage.scala:139)
 ~[akka-stream-experimental_2
        

Any help will be appreciated.

Thank you,
Konstantin

-- 
>>>>>>>>>>      Read the docs: http://akka.io/docs/
>>>>>>>>>>      Check the FAQ: 
>>>>>>>>>> http://doc.akka.io/docs/akka/current/additional/faq.html
>>>>>>>>>>      Search the archives: https://groups.google.com/group/akka-user
--- 
You received this message because you are subscribed to the Google Groups "Akka 
User List" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/akka-user.
For more options, visit https://groups.google.com/d/optout.

Reply via email to