The most demoralizing upload loop goes like this: attach the file, hit submit, wait, get a vague rejection, guess what was wrong, change something, try again. Repeat until it works or you give up. The fix is to check the file against the requirements before you upload, so the first submission is the one that passes.

What Upload Validators Actually Check

Most portals enforce a short, mechanical list. They rarely tell you which one you failed, but it’s almost always one of these:

  • Format / extension: is it one of the accepted types (JPG, PNG, PDF)? An iPhone HEIC is the classic silent failure.
  • MIME type: some validators check the file’s real content type, not just the .jpg on the end, so renaming isn’t enough.
  • File size: over the max (often 1–5 MB for photos, 10–25 MB for documents)?
  • Dimensions: does it demand an exact pixel size or aspect ratio (e.g. a square ID photo)?
  • Page count or type: some want a single-page PDF, or a document rather than a photo.

A 30-Second Pre-Flight Checklist

  • Format: is the extension one they list? If it’s HEIC, convert to JPG first.
  • Size: check the file size against the cap; if it’s over, shrink it.
  • Dimensions: if they specify pixels (like 600×600), confirm yours match with exact image fit.
  • Privacy: if it’s an ID going to a stranger’s portal, strip the metadata.

You can eyeball most of this in your file’s Properties/Get Info: size and dimensions are right there. The extension is on the filename. The rest is reading the portal’s fine print.

Checking it before you submit

When you’d rather just know, Document Requirement Checker takes your file and the portal’s rules and tells you whether it will pass, and exactly what to fix if it won’t, for $1, before you waste a submission. If it needs fixing, UploadFix gets it to spec in one pass.

Why This Saves More Than Time

Some portals rate-limit attempts, lock you out after a few failures, or route rejected submissions to a slow manual-review queue. A rejected upload isn’t always a free retry; sometimes it costs you days. Getting the first one right is worth the 30-second check.

Why the same file passes one site and fails another

The frustrating part of upload validation is that there is no single standard. Two portals asking for “a JPEG under 5 MB” can disagree about whether your file qualifies, because they are checking different things in a different order.

Most upload paths run three checks, and any one of them can reject you:

  • The extension. The cheapest check, and the least reliable. It reads the characters after the last dot and nothing else. Rename a PNG to .jpg and this check is satisfied, which is exactly why the better portals do not stop here.
  • The magic bytes. A stricter server reads the first few bytes of the file to identify the real format. A JPEG starts FF D8 FF; a PNG starts with a byte followed by PNG. If the extension says one thing and the bytes say another, a strict validator rejects the file, and often with a maddeningly generic message.
  • The decoded image. The strictest portals actually open the file to read its true dimensions and colour profile. This is where a CMYK JPEG from a print workflow fails a portal expecting RGB, even though it is unquestionably a valid JPEG.

So the honest answer to “why did this fail here and not there?” is usually that the second site checked one layer deeper than the first.

Size limits are a chain, and you hit the shortest link

A stated limit is frequently not the operative one. A request passes through several components before the application sees it, and each has its own ceiling: the web server caps the request body, the language runtime caps the upload, and only then does the application enforce the number printed on the page.

You can usually tell which one stopped you by how it failed. A clean, styled error naming your file is the application talking, and the limit on the page is real. A raw server error page, or a request that dies partway through with no message at all, means you hit a lower ceiling further out, and no amount of arguing with the documented limit will help. Shrink the file below the number that actually bit you.

One more wrinkle worth knowing: files sent as part of an email or some JSON APIs get base64-encoded in transit, which inflates them by roughly a third. A 4.8 MB attachment can genuinely exceed a 5 MB ceiling for reasons that have nothing to do with your file.

Why the error message is never useful

It is worth understanding that the unhelpfulness is deliberate. Many validators return a flat “invalid file” regardless of what actually failed, partly for simplicity and partly because detailed rejection messages tell an attacker exactly what the parser accepts. The check is mechanical and precise; the message is vague on purpose.

Which means the diagnosis is yours to do. Two failures account for most of it: a HEIC that the portal will not decode, and a file over the size cap, followed by exact pixel dimensions on ID photos. And renaming a HEIC to .jpg does not work: any validator reading the actual bytes still rejects it, and the server cannot decode it regardless. You have to genuinely convert it.

Before you hit submit

Don’t submit and pray. Check format, size, and dimensions against the requirements first; a 30-second pre-flight beats a rejection loop. When you’d rather have it confirmed, the $1 requirement checker tells you before you upload, and UploadFix fixes whatever’s off. Browse the full $1 tools catalog.