Server-side URL import with live NDJSON progress
Paste a remote URL; the server fetches it and streams the bytes through your IUploaderProvider. The client sees live progress events (started -> progress -> complete) as newline-delimited JSON from a streaming fetch() response - no polling, no WebSocket. Backward-compatible: older clients that don't send Accept: application/x-ndjson get a single JSON response.
What you should see: paste a URL and the server fetches it, so the file never passes through the browser at all — useful for large assets already hosted elsewhere.
This demo imports remote URLs only. Paste a URL above; local file selection and drag/drop are disabled for this strategy.
SSRF warning: the server fetches an arbitrary URL. In production, allow-list hosts / schemes, or wrap with auth + rate-limiting middleware.
Client API
// Queue a URL import - returns the queued UploadTask.
uploader.importFromUrl('https://example.com/sample.zip', {
fileName: 'report.zip', // optional contentType: 'application/zip' // optional
}); NDJSON wire protocol
Client sends Accept: application/x-ndjson; server streams one JSON event per line:
{"type":"started","fileName":"sample.zip","totalBytes":12345678}
{"type":"progress","loaded":1048576,"total":12345678}
{"type":"progress","loaded":2097152,"total":12345678}
...
{"type":"complete","success":true,"fileGuid":"...","fileName":"sample.zip","fileSize":12345678} Server-side fetch
The /import-url endpoint uses IHttpClientFactory (named client CoreUploadImport) + ProgressReportingStream to emit throttled progress events during the server's fetch.