saving octet-stream png file

Larry Martell larry.martell at gmail.com
Fri Aug 19 15:45:33 EDT 2016


On Fri, Aug 19, 2016 at 3:00 PM, Larry Martell <larry.martell at gmail.com> wrote:
> 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.

No joy using cgi.FieldStorage. The request I get (of type
django.core.handlers.wsgi.WSGIRequest) does not have a stream method.
I'm sure there's some way to do this, but I have not come up with
anything googling. Going to try the django list.



More information about the Python-list mailing list