Thank you for your response! Those are good ideas. However, there are some reasons why I couldn't do some of those things.
Sending thing to the server happens opportunistically, not as a direct response to taking the camera picture. I'm storing the URI instead of the entire base64 encoded DATA_URL string because I don't want to have to keep it around in localStorage in between application launches.
(BTW, does anyone know if localStorage has the typical 5 MB limit via PhoneGap? Also, does "per origin" translate to "per application" in PhoneGap?)
I cannot use the FileTransfer API because my REST service uses basic authentication, and the current build of PhoneGap does not have a way to configure what to send in the header of the request. I may end up using / writing plugins to do this (I think I saw that someone's already worked on this) to avoid loading the base64 encoded string into JavaScript memory.
[RESOLVED] I think my problem was, as you mentioned, that I was using the file URI instead of the file path. It worked in Android, the way I had written it, which threw me off. I just got it working for both iOS and Android by using the file object instead.
Thanks again,
Yoh