Just a note on the performance concern with the Base64 workaround: it depends on where you do the conversion.
In our setup the file is converted to Base64 in the user’s browser, before it ever reaches our backend, so there’s no server-side download-and-re-upload cycle. No extra server traffic, no memory overhead — the cost sits with the client that just picked the file anyway.
We migrated a production receipt-OCR pipeline from fileData.fileUri to inline Base64 across ~34 test documents (JPEG, PNG, PDF). Two side effects worth mentioning: median processing time dropped by roughly half, since Google no longer has to fetch the file from our CDN, and PDF input started working.
For anyone hitting this from a browser-based app, client-side conversion may be a better answer than waiting for the ingestion path to be fixed. It’s a different architecture rather than a workaround.