Upload via API leads to missing plus signs in HTTP-Body


#1

Hi!

I’m developing a Rails-app that needs to take images from a separate
program. I managed to upload base64 encoded images via HTTP-Post-
Request (Cocoa), the HTTP-Body looks like (base64-data is shortened)
this:

“filename=Pic1.jpg&content_type=image/jpeg&data=/9j/4AAQSkZJRgABAQECeUJ
+woRAD/4gxYSU”

When I access the data via params[:data] in my controller, all the
plus signs are gone and substituted with spaces. I checked the
outgoing data of the separate program with a sniffer and it contains
the plus signs, so the substitution must take place somewhere on the
server.

Does anybody have an idea what causes this behaviour?

Thanks,
Thomas


#2

On Jan 22, 11:00 pm, TKAB removed_email_address@domain.invalid wrote:

When I access the data via params[:data] in my controller, all the
plus signs are gone and substituted with spaces. I checked the
outgoing data of the separate program with a sniffer and it contains
the plus signs, so the substitution must take place somewhere on the
server.

The standards dictate that with application/x-www-form-urlencoded
data (the default;
http://www.w3.org/TR/html401/interact/forms.html#h-17.13.3.3)
spaces are encoded by + signs, so the server is doing the correct
thing by turning them into spaces.

Fred


#3

Thank you very much, I was completely unaware of that.
So it would be a better idea to imitate a form upload and set the
Content-Type to multipart/form-data? Or is there any other way?


#4

On 23 Jan 2009, at 08:18, TKAB wrote:

Thank you very much, I was completely unaware of that.
So it would be a better idea to imitate a form upload and set the
Content-Type to multipart/form-data?
Certainly an option
Or is there any other way?

You could replace + signs with what ever the correct % escape sequence
is, but the multipart/form-data route is probably simpler.

Fred


#5

OK, I understand.

Thanks for your help!


#6

TKAB wrote:

OK, I understand.

Thanks for your help!

http://en.wikipedia.org/wiki/Base64#URL_applications

This might help. See the section on an alternative base64 that is safe
for URL encoding.