I’m trying to upload a file via django forms, then send it to an API.
Here’s the encoding function:
#FYI, requestFile = request.FILES['file']
def EncodeFile(self, requestFile, fields = []):
BOUNDARY = '----------boundary------'
CRLF = '\r\n'
body = []
# Add the metadata about the upload first
for param in fields:
body.extend(
['--' + BOUNDARY,
'Content-Disposition: form-data; name="%s"' % param,
'',
fields[param],
])
fileContent = requestFile.read()
body.extend(
['--' + BOUNDARY,
'Content-Disposition: form-data; name="file"; filename="%s"'
% requestFile.name,
# The upload server determines the mime-type, no need to set it.
'Content-Type: ' + requestFile.content_type,
'',
fileContent,
])
# Finalize the form body
body.extend(['--' + BOUNDARY + '--', ''])
result = 'multipart/form-data; boundary=%s' % BOUNDARY, CRLF.join(body)
return result
The problem is that when it reaches “CRLF.join(body)” it complains about “‘utf8’ codec can’t decode byte 0xff in position 0: invalid start byte”.
The exact same piece of code works flawlessly from the command line with the exception that the requestFile is actually a path to a file, and I’m doing an open(requestFile, ‘rb’) before reading the contents.
I can not for the life of me figure out what to do next. I’ve been googling for an answer for the past 10 hours or so.
Apparently this line of code causes the problem:
The correct line would be instead: