Short answer: choose managed cloud object storage for the easiest Node.js avatar upload path, unless tenant isolation requires a storage plane your team must operate itself.
Managed cloud object storage is the easiest path for Node.js avatar uploads, but I would choose self-hosted storage when the tenant boundary is the primary control rather than an implementation detail. The deciding question is not how quickly an HTTP multipart request can become an image; it is whether a healthtech platform can prove that an avatar, a training artifact, and a deletion request stay inside the right tenant boundary for their entire lifecycle.
For a system that stores training artifacts under a reproducible retention policy, I would put the upload behind a short-lived, scoped capability, keep the application out of the byte path, and make the object key carry an immutable tenant identifier.…