Error ‘0’ occured while receiving the doument is Proxmox’s useless way of saying the pve user doesn’t have Datastore.Allocate on the storage. Fix the permissions and the ISO upload works.

What’s actually happening
You’re logged in as a non-root user, probably one you made for day-to-day stuff. You try to upload an ISO to local storage and get that cryptic error. The web UI doesn’t tell you it’s a permission problem. It just throws a generic ‘Error 0’ like that helps anyone.
The real issue is the pve user’s role. By default, roles like PVEVMUser or even PVEDatastoreUser don’t include the Datastore.Allocate privilege. That privilege is required to create or upload files to a storage. Without it, the API call fails and you see that dumb message.

The fix
You have two ways to solve this. The quick one is to just use root for uploads. But if you want the pve user to do it properly, assign the right role.
Go to Datacenter → Permissions → Users. Select your pve user, then click Add → Permission. Choose the path (like /storage/local), pick a role that includes Datastore.Allocate, and hit Add. The built-in role PVEDatastoreAdmin has it, or you can create a custom role with just that privilege.
If you want a custom role, go to Datacenter → Permissions → Roles, click Create, name it something like ISOUploader, and add the Datastore.Allocate privilege. Then assign that role to your user on the storage path.
After that, log out and back in. The upload should work without switching to root.
Why this is annoying
It’s not just that the error is unhelpful. The whole privilege model is hidden. You’d think a user with storage access could upload, but no. Allocate is separate from read and write. I get why it exists, but the UI could at least say ‘permission denied’ instead of ‘Error 0’.
And don’t bother searching the forum for that exact error string. You’ll find a thread that ends with no clear answer. That’s why I’m writing this.
If you’re setting up a user for backups or ISO management, just give them Datastore.Allocate from the start. It saves you from this nonsense later. Also check out how to give a user access to only one VM’s console if you’re doing granular permissions.