Upload binary data to AppEngine Blobstore via HTTP request
===

I'm trying to figure out the lowest data-overhead way to upload/download binary data to Google AppEngine's Blobstore from a JavaScript initiated HTTP request. Ideally, I would like to submit the binary data directly, i.e. as unencoded 8-bit values; maybe in a POST request that looks something like this:

    ...
    Content-Type: multipart/form-data; boundary=boundary;
    
    --boundary
    Content-Disposition: form-data; name="a"; filename="b"
    Content-Type: application/octet-stream

    @#^%(^Qtr...
    --boundary--

Here, `@#^%(^Qtr...` ideally represents arbitrary 8-bit binary data.

Specifically, I am trying to understand the following:

 - Is it possible to directly upload 8-bit binary data, or would I need to encode the data somehow, like a base-64 MIME encoding?
 - If I use a different encoding, would Blobstore save the data as 8-bit binary internally or in the encoded format? I.e. would a base-64 encoding increase my storage cost by 33%?
 - Along the same lines: Does encoding overhead increase outgoing bandwidth cost?
 - Is there a better way to format the POST request so I don't need to come up with a `boundary` that doesn't appear in my binary data? E.g. is there a way to specify a Content-Length rather than a boundary?
 - In the GET request to retrieve the data, can I simply expect to have binary data end up in the return string, or is the server going to automatically encode the data somehow?
 - If I need to use some encoding, which one would be the best choice among the supported options for essentially random 8-bit data? (base-64, UTF-8, someting else?)