Skip to content
HexaTransfer
Back to blog
File Transfer

Slow Transfer Speed Fix: Diagnose and Solve Upload Issues

Diagnose and fix slow file transfer speeds. Step-by-step troubleshooting for network issues, browser problems, and service-side bottlenecks.

To fix a slow upload, diagnose in order: measure the raw connection with speedtest-cli, compare it to the transfer tool's actual throughput in DevTools, check for background syncs eating bandwidth, verify the service isn't throttling per-transfer, and confirm you're on the closest regional endpoint. A 500 Mbps line delivering 40 Mbps to a transfer service is either bandwidth contention, CDN region mismatch, server throttling, or a single-stream bottleneck. Each has a different fix, and all of them show in DevTools' Network tab before you do anything else.

Measure the pipe first

Before blaming the transfer service, confirm your connection is actually delivering what you think it is. Run speedtest-cli --json from a terminal, or speedtest.net in the browser. Write down upload Mbps, latency, and jitter. This is your ceiling. If your "500 Mbps" connection only delivers 80 Mbps upload on speedtest, no transfer service will do better.

Run the test twice, once on Wi-Fi and once on Ethernet if possible. The delta tells you how much your Wi-Fi is costing. On Wi-Fi 5 in an average home, expect to lose 30 to 50 percent of the wired ceiling.

Compare speedtest to actual transfer throughput

Open the transfer service, start the upload, and open DevTools > Network tab. Watch the individual request throughput. If speedtest says 500 Mbps and the transfer is delivering 150 Mbps, the gap has four likely causes: the service is using a single stream (can't saturate a high-latency pipe), the service's CDN endpoint is far from you, background bandwidth consumers are stealing, or the service is rate-limiting per transfer.

Parallel-chunked uploaders (tus.io-based services, S3 multipart, HexaTransfer) should run 4 to 8 concurrent requests. Count them in the waterfall. Fewer than that on a fast line means the service is leaving bandwidth on the floor.

Kill background syncs

macOS Activity Monitor (Network tab, sort by "Sent Bytes per sec") and Windows Resource Monitor (Network tab) show every process's bandwidth. Likely culprits: Dropbox, Google Drive, OneDrive, iCloud Photos, Backblaze, Time Machine over network, Adobe Creative Cloud sync. Quit them, don't just pause, because pause sometimes keeps the TCP connections open.

A Zoom call in HD uses 2.5 Mbps upstream. A 4K YouTube upload from another tab can consume 20 Mbps. Even Slack's file previews push a few hundred KB/s. On asymmetric connections (100 Mbps down, 10 Mbps up is a common cable plan), these add up fast.

Check the regional endpoint

Many transfer services route through CDN edges. If your DNS or GeoIP is stale, you might be uploading to a Frankfurt edge from Sydney, which adds 300 ms round-trip and crushes single-stream throughput. Check the endpoint's IP with DevTools' Network panel (right-click the request > Copy > Copy URL, then nslookup), then ping it to see latency.

Ideal latency to your transfer service's ingest: under 20 ms for same-city, under 50 ms for same-continent, under 100 ms for intercontinental. If you're at 250 ms and you're on the same continent as the service, something is routing through a far edge.

Switch DNS to rule out stale GeoIP

If you're still on your ISP's default DNS, try Cloudflare (1.1.1.1), Google (8.8.8.8), or Quad9 (9.9.9.9) temporarily. Different resolvers return different CDN edges because they answer ECS (EDNS Client Subnet) queries differently. A switch can drop upload latency by 50 ms and push throughput up 20 percent without touching anything else.

Router bufferbloat

Bufferbloat is invisible to normal speedtests but crushes mixed-use connections. Run the Waveform bufferbloat test at waveform.com/tools/bufferbloat. An A+ grade means your router handles queues cleanly. An F grade means your router is introducing 200 to 2000 ms of latency under load, which not only hurts interactive traffic but causes TCP congestion control to back off repeatedly, slashing upload throughput.

Fix: enable SQM (Smart Queue Management) on OpenWrt or pfSense, enable QoS on Asus/Netgear/Ubiquiti, or buy a router that does it by default (recent eero, Google Nest Wifi Pro).

Disable VPN unless necessary

A VPN adds 20 to 80 ms of latency and typically caps throughput at the VPN server's upstream. A 1 Gbps line through a congested PIA or NordVPN endpoint can drop to 50 Mbps. Good providers (Mullvad, ProtonVPN Plus) hold up better; free VPNs almost always strangle uploads.

If the transfer service already uses TLS 1.3 and end-to-end encryption, the VPN is redundant for confidentiality during transit. Turn it off during uploads, turn it back on afterwards.

Browser choice and protocol

Chrome, Edge, Brave, and Firefox all support HTTP/3 (QUIC) natively. Safari does too but defaults to HTTP/2 for some hosts. HTTP/3 over UDP tolerates packet loss far better than HTTP/2 over TCP on cellular, hotel Wi-Fi, or lossy last-mile links.

Check DevTools' Network > Protocol column. If it says h2, you're on HTTP/2. If it says h3, you're on HTTP/3. Services that serve uploads over HTTP/3 see 15 to 30 percent throughput gains on lossy links.

Try a different network to isolate the issue

The fastest diagnostic: tether off your phone for a minute and upload a test chunk. If phone tethering is faster than your home Wi-Fi, the problem is in your local network (router, ISP, or device). If phone tethering is the same speed, the bottleneck is further upstream (transit congestion, service-side limit).

This one test eliminates half the possible causes in under two minutes.

When the service is the bottleneck

Some transfer services simply cap per-transfer throughput. Free tiers on some tools throttle above 10 MB/s regardless of your connection. Paid tiers often remove the throttle.

If you've eliminated everything else and your 500 Mbps line still delivers 30 Mbps to a specific service, the service is the limit. Switch. HexaTransfer doesn't throttle per-transfer and runs parallel chunked uploads that saturate whatever your pipe can actually push up to the 10 GB per-transfer ceiling.

Try it at hexatransfer.com — free, no account, 10 GB max.

Send large files securely with end-to-end encryption

Transfer files up to 10 GB for free with end-to-end encryption. No account required. Your files are encrypted in your browser before upload — no one else can read them.

Send a file