Я пытаюсь загрузить файл через формы django, а затем отправить его в API.Django transfer uploaded file
Вот функция кодирования:
#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
Проблема заключается в том, что, когда он достигает «CRLF.join (тело)» жалуется на «„utf8“кодек не может декодировать байт 0xff в позиции 0: недействительна стартовый байт ".
Эта же часть кода работает безупречно из командной строки, за исключением того, что requestFile - это фактически путь к файлу, и перед чтением содержимого я делаю open (requestFile, 'rb').
Я не могу для жизни меня выяснить, что делать дальше. Я искал ответ за последние 10 часов или около того.
Вы делаете что-либо с файловым потоком до вызова этой функции? Похоже, что указатель поиска не находится в начале потока. Что произойдет, если вы выполните 'requestFile.seek (0)' вверху? –
Не делайте ничего с файлом перед тем, как попасть в эту функцию. Добавил requestFile.seek (0), как вы уже сказали. Та же ошибка. –