saving octet-stream png file

Larry Martell larry.martell at gmail.com
Fri Aug 19 15:00:12 EDT 2016


On Fri, Aug 19, 2016 at 1:24 PM, Chris Angelico <rosuav at gmail.com> wrote:
> On Sat, Aug 20, 2016 at 3:10 AM, Larry Martell <larry.martell at gmail.com> wrote:
>> I have some python code (part of a django app) that processes a
>> request that contains a png file. The request is send with
>> content_type = 'application/octet-stream'
>>
>> In the python code I want to write this data to a file and still have
>> it still be a valid png file.
>>
>> The data I get looks like this:
>>
>> u'\ufffdPNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x01\ufffd\x00\x00\x01\ufffd
>> ......'
>>
>> If I try and write that to a file it fails with a UnicodeEncodeError.
>> If I write it with encode('utf8') it writes the file, but then it's no
>> longer a valid png file.
>>
>> Anyone know how I can do this?
>
> At that point, you've already lost information. Each U+FFFD (shown as
> "\ufffd" above) is a marker saying "a byte here was not valid UTF-8"
> (or whatever was being used). Something somewhere took the .png file's
> bytes and tried to interpret them as text, which they're not.
>
> What sent you that data? How did you receive it?

The request is sent by a client app written in C++ with Qt. It's
received by a django based server. I am trying to port a falcon server
to django. The falcon server code did this:

form = cgi.FieldStorage(fp=req.stream, environ=req.env)

and then wrote the png like this:

fd.write(form[key].file.read())

Whereas in the django server I am doing:

fd.write(request.POST[key])

I've never used the cgi module. I guess I can try that. I've written a
lot with django but never had to receive a PNG file.



More information about the Python-list mailing list