In general, it is pretty subjective as to which tactic you use (whether it be traits or inheritance or other stuff).
But based on the info you've provided, you have a method that may, in the future, implement a different service in order to accomplish the same task (correct me if I am wrong).
That being the case, it sounds like you should check out the Repository pattern. Repositories essentially provide an abstract "api" for your model layer; a bunch of methods that you can use to accomplish your task (e.g, a method called "uploadImage", which uploads a given image). The beauty of repositories is that you can set them up to implement different providers/services which accomplish the same task. That way, you could change the service that manages how images are uploaded, but you can still use the same uploadImage method from your repository to accomplish the task.