I think that's probably got as much to do with framework limitations as anything else. Using multipart uploads is pretty sensible as it means the file upload can be properly handled by the parser and streamed to disk for large uploads. With base64 strings embedded in JSON you'll always end up with the file in memory, which may not be desirable for large uploads. Having said that, I don't think it's unreasonable and does at least keep the client requests limited to a single format.
For very large uploads I'd recommend raw file uploads using the `FileUploadParser` class, as that'll be the most efficient in terms of upload request size.
If you want base64 embedded in JSON you'd probably want to do something like a custom serializer ImageField that overrides `field_from_native` to decode the base64 string and save it as an `UploadedFile`, *or* use a standard ImageField, but write a custom parser where you can specify which fields should be treated as file uploads.
I know that's a little sparse on detail, but hopefully it's enough to get you started - would be interested to see any follow up to this.
Cheers,
Tom