urltoapp.dev
Learn

File uploads, camera and downloads in a URL app

“Choose file” does nothing, the camera never opens, downloads vanish. All three come from the same place: features the WebView hands to the app, which the app has to handle.

Updated Oct 20262 min readurltoapp.dev

Short answer

In a WebView, tapping <input type="file"> calls the app's file chooser; if the app doesn't implement one, nothing happens. Camera capture also needs the CAMERA permission and a place to store the photo; downloads need a download listener; location needs a geolocation prompt plus location permission. Use a converter that supports these, then make your site's inputs explicit with accept and capture.

Uploads: what the site should send

The WebView passes your input's attributes to the app, which uses them to choose what to show:

<!-- gallery or files, images only -->
<input type="file" accept="image/*">

<!-- open the camera straight away -->
<input type="file" accept="image/*" capture="environment">

<!-- several documents -->
<input type="file" accept=".pdf,.doc,.docx" multiple>

Be specific. A bare <input type="file"> may open a generic file browser that confuses people looking for their photos.

Camera: permission plus a file to save into

To take a photo, the app asks Android's camera to save into a temporary file and returns that file to your page. That needs the CAMERA permission in the manifest and a runtime prompt the first time. If your form needs photos, tell the converter to include camera support; if it doesn't, leave it out — fewer permissions means fewer Play questions.

Video and audio inside the page

For getUserMedia() (live camera or microphone in the page, such as video calls or QR scanners), the WebView asks the app to grant the permission. Without native support the call fails silently. Test it explicitly if your site scans QR codes or records voice.

Downloads

  • Normal links to files (/invoice.pdf): the app needs a download listener that hands the file to Android's download manager, so it appears in notifications and the Downloads folder.
  • Files behind a login: the download manager doesn't have the WebView's cookies unless the app passes them. If invoices download as an HTML login page, that's why.
  • blob: and data: URLs (made by JavaScript, common for CSV exports): the download manager can't fetch them. The app must read them through JavaScript, or your site can offer a real URL for the file instead.

Location

Store finders and delivery forms call navigator.geolocation. The app needs location permission in its manifest and must answer the WebView's geolocation prompt. Ask only when the user taps “Use my location”, not on page load — Android shows two prompts (app, then site) and people decline the second when it comes out of nowhere.

Quick diagnosis

SymptomLikely cause
Tapping “Choose file” does nothingNo file chooser in the app shell
Gallery opens but camera option missingNo camera permission, or no capture/accept
Download shows “unsuccessful”Cookies not passed, or a blob: URL
QR scanner shows a black boxgetUserMedia permission not granted by the app

FAQ

Why doesn't file upload work in WebView?

The WebView doesn't open a file picker by itself; it asks the app to. If the app shell lacks a file chooser implementation, the tap is ignored.

Can a URL app upload multiple photos?

Yes, if the input has multiple and the app's chooser supports multi-select.

Do PDFs open inside the app?

WebViews can't render PDFs inline like Chrome. Download them, or open them with the phone's PDF viewer.

Read next