On Eagle 3D Streaming, your Unreal app can ask the viewer for a file from their own device: the browser's file picker opens, the viewer chooses a file, and it is written onto the streaming machine where your app reads it as an ordinary file.
The direction here is viewer's device → streaming machine. For the other way, see send a file to the viewer's device.
Call E3DS Transfer File From User Browser To Unreal and
give it a destination inside the project — for example
ProjectDirectory/Saved/.

The viewer picks a file in the dialog the platform opens.

Transferring the file is not instant, so the platform reports progress as messages your app can listen for.
| Message | Means |
|---|---|
onUserSideFileSelected | The viewer picked a file. The transfer has started. |
onUserSideProcessingProgressUpdate | Sent repeatedly while the browser is sending the file, with filename and progress. Treat it as a sign of activity: progress does not currently arrive as a usable percentage. |
onUserSideFileProcessingFinished | The browser has finished sending it. |
onUploadedFileAvailable | The file is now on the streaming machine, in your project directory. This is the one that means success. |
onUserSideFileSelectionCanceled | The viewer opened the dialog and closed it without choosing. |
Each carries the filename, except the cancellation. Together they give you the three states worth tracking: in progress, finished, abandoned.
A failed transfer sends nothing to your app — no message
says it failed. If onUploadedFileAvailable has not arrived within
a time that fits your file sizes, treat the transfer as failed.
A common pattern is a timer that polls for the file with
File Exists until it appears. That works — until
somebody closes the dialog, and the timer waits forever for a file that will
never arrive. onUserSideFileSelectionCanceled is what stops it.
Send this with Send Pixel Streaming Response:
{"cmd": "sendLocalFileToUE4", "pathToSaveFile": "C:/0.apps/YourCompany/YourApp/3/YourApp/Saved/"}
The path above is an example of what your app sends; never type it, it differs on every streaming machine. Build
pathToSaveFile at run time as an absolute path: Get Project Directory
(or Get Project Saved Directory) → Convert Relative Path To Full, and end it with / —
for example the full project directory + Saved/, as in the screenshot
below. The file name is appended to it with no separator, so without the
trailing / the file lands next to the folder with the folder's
name stuck to the front. A relative path is resolved against the streaming
system's own folder, not your project.

Knowing whether the viewer is on a phone before you show them a mouse control.
Last updated