On Fri, Aug 19, 2016 at 3:00 PM, Larry Martell <larry.mart...@gmail.com> wrote: > On Fri, Aug 19, 2016 at 1:24 PM, Chris Angelico <ros...@gmail.com> wrote: >> On Sat, Aug 20, 2016 at 3:10 AM, Larry Martell <larry.mart...@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. -- https://mail.python.org/mailman/listinfo/python-list