Question

I am using the following path in my spray-can server (using spray 1.2):

path("my"/"path"){
  get{
    complete{
      val buf:Array[Byte] = functionReturningArrayofByte()
      println(buf.length)
      buf
    }
  }
}

The length of the buffer (and what is printed by the code above) is 2,263,503 bytes. However, when accessing my/path from a web browser, it downloads a file that is 10,528,063 bytes long.

I thought spray set the content type to application/octet-stream, and the content length, automatically when completing with an Array[Byte]. I don't realize what I may be doing wrong.

EDIT

I've run a small test and have seen that the array of bytes is output as a String. So, for example, if I had two bytes, for example 0xFF and 0x01, the output, instead of just the two bytes, would be the string [ 255, 1 ]. I just don't know how to make it output the raw content instead of a string representation of it.

Was it helpful?

Solution

Wrapping the buf as HttpData solves the problem:

path("my"/"path"){
  get{
    complete{
      val buf:Array[Byte] = functionReturningArrayofByte()
      HttpData(buf)
    }
  }
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top