Now I look back at how I did it in a component that worked fine, it seems like you are only doing half the job. Maybe my code is overcomplex (it is from a while back) but as Glen says you need to do ->input->files->get() but in my case this is used like this:
$importfile = Factory::getApplication()->input->files->get('jform', null, 'files', 'array' );
I think at this point it has been uploaded to a temp space on the server with a temporary name.
$importfile is an array of arrays of all the files controls on the form, each containing the original filename (name.ext only, not path) ['name'] and the temporary filename on the server ['tmp_name'] (which includes the path on the server)
You then have to sanitise the original filename you have been given (if you are keeping the same filename once it is upload) in case it has dodgy characters in the name that your server won't like:
$filename =JFile::makeSafe($importfile['file2import']['name']
where 'file2import' is the name of the control on your form (eg 'caTest'). You might have more than one files control on the form.
Of course you can use your own filename instead if there may be uploads with the same name.
You then get the temporary filename and also set the destination filename you want to use
$src = $importfile['file2import']['tmp_name'];
$dest = JPATH_COMPONENT_ADMINISTRATOR ."/uploads/". $filename;
(obviously you'll need to adjust the destination to somewhere your plugin can access)
you then transfer the temporary file to the destination
JFile::upload($src, $dest);
where you can do what you like with it. Or I suppose you might be able to play directly with $importfile['file2import']['tmp_name'] if you didn't want to keep it on the server?
I think these days we are supposed to be using "\Joomla\CMS\Filesystem\File" in place of JFile but I'm not sure about that.
Hope this helps and someone more knowledgeable can say whether it is correct or best. It certainly works for me in a component.
RogerCO