return io.reader instead of a byte slice