HTTP File Uploads are not literally file connections.
What actually happens is you will have defined an HTML FORM with a INPUT control whose type is "file". JSF/Primefaces will have rendered this for you. The FORM type must be of type MIME/multipart, which tells the browser to use MIME encoding on the (possibly not-text) upload data and that there can be multiple data items being uploaded, not just the file itself.
As I said, there's no over-the-internet file operation going on here. What actually happens is that the client (browser) will take the selected file (normally it will pop up a local file browser dialog to allow you to select which file you want), it (the client) will open that file, read it, convert it to MIME encoding, and stuff the encoded data in as part of the overall data stream being submitted over the network to the server.
Once this complex URL request lands on the server, the server routes it to the appropriate webapp where the backend support logic breaks it out to its components and routes the components to their appropriate destinations. For simple controls, that means HttpRequest attributes. For the file data, that means it gets cached somewhere, most likely in a temporary file or in RAM and probably will be MIME-decoded back to its original bytes.
Where that cache is and what its organization and format are are none of the webapp's business. The file upload API (as fronted by the PrimeFaces
JSF fileupload control API) knows where to get the data - and its metatdata - when you request it and that's all the app needs to know. The app can then open the data as a stream and copy it to an actual file on the server's filesystem, stuff it into a database BLOB, consume it directly in application logic or do whatever the application programmer wants to do with it. The app logic itself would normally be invoked from a JSF "action" method or AJAX listener.
One thing to note is that when a "filename" is sent as part of a file upload over HTTP, the actual "filename" is determined by the client and doesn't actually have to literally be the client-side filename. In real life, Internet Explorer tends to send the entire filesystem pathname, Firefox and other browers tend to send the simple filename without path. Technically, the IE was is a security risk since it tells outsiders how the client's disk drive is organized and that's not essential information, especially since the server cannot access the client-side file directly in any event and therefore doesn't need to know its path.