You can’t; there’s no built-in functionality for projecting a world location onto a spline (I should know, I had to figure out the math for my spline-based grinding system and it involves getting the world location of all spline points in an array, finding the nearest two to a given location, finding the ratio of the distance from the location to each of those two, using that ratio to find the weighted average of the distance along the spline at each of those two points, then snapping the actor to the spline at that distance) and the math, as you can see, is intense enough that one would NOT want to be performing it every Tick, at least not using BPs.
There’s probably a cheaper way but it isn’t super easy; I can provide more details when I get back to my PC but essentially you would take your camera spline and use it to define, via construction script, a series of trigger volumes. These would each fire an event on overlap; what you would do is use a separate actor for your camera, but set it to have a planar constraint on its motion, and use these overlaps to adjust the normal of that constraint. With enough trigger volumes, you can essentiallt create a “curved plane” in space that the camera actor is bound to. Then you can use simpler movement commands to keep the camera following the player and let the planar constraint system ensure that the camera remains fixed to this track.
I use this system to temporarily snap the player to 2.5D planes which can curve through 3D space in my game and it works exceptionally well (and the framerate cost is very small, though the memory footprint may get larger as you can have hundreds and hundreds of these triggers being constructed for a given spline).
Beyond that there’s probably a smarter C++ way of doing this but I couldn’t tell you what that was…