This happens because your context site is "shell" .
You need to switch to website site using :
using (new SecurityDisabler())
{
var item = mediaCreator.CreateFromStream(ms, fileName, options);
using (new SiteContextSwitcher(Factory.GetSite("website")))
{
var uri = MediaManager.GetMediaUrl(item);
}
return uri;
}