Я хотел бы загрузить изображение из внешнего интерфейса флаттера на сервер python (django).
Я пытался отлаживать это дольше, чем хотелось бы признать. В сети нет ресурсов, показывающих, как обрабатывать загрузку файла из Flutter в бэкэнд Django.
Бэкэнд получает файл, но я получаю ошибку декодирования UTF-8, когда файл сохраняется влокальное хранилище.
Это конкретная ошибка, которую я получаю, когда пытаюсь загрузить изображение:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte
.
Я включил полный обратный поиск в this pastebin .
Информация о файле в том виде, в каком она получена серверной частью:
{'file': <_io.BytesIO object at 0x7fe121a44f50>,
'_name': 'tempProfilePic.jpg',
'size': 311489,
'content_type': 'application/octet-stream',
'charset': None,
'content_type_extra': {},
'field_name': 'file'}
Ниже приведен код моего внешнего интерфейса:
if (_imageFile != null) {
var stream =
http.ByteStream(DelegatingStream.typed(_imageFile.openRead()));
var length = await _imageFile.length();
var multipartFile = http.MultipartFile('file', stream, length,
filename: basename(_imageFile.path));
request.files.add(multipartFile);
}
request.fields['token'] = token
var response = await request.send();
_imageFileпеременная File, которая содержит изображение .png, сохраненное в хранилищеФайл отправляется без ошибок.
Ниже приведен мой внутренний код: models.py
class userData(models.Model):
profilePic = models.FileField(upload_to='documents/')
token = models.CharField()
И элемент представления, который обрабатывает запрос на публикацию: views.py
def uploadImage(request):
currUser = userData.objects.get(token=request.data['token'])
if request.FILES['file']:
currUser.profilePic= request.FILES['file']
Если то, что я сейчас делаю, кажется слишком сложным для отладки, есть ли более простые способы, чтобы я мог подойти к этому? (например, отправка файла в виде строки из внешнего интерфейса?)
(К вашему сведению, мне нужен бэкэнд для других функций и я не могу использовать подходы без обслуживания или с использованием firebase. Все остальные функции выполняются в Django. последние вещи, которые у меня остались).
Я могу предоставить любую дополнительную информацию, если это необходимо.
Спасибо за вашу помощь.
Есть несколько вопросовупоминая ошибку декодирования UTF-8, ни одна из которых не является исчерпывающей или содержит достаточно кода, чтобы я мог отладить мой вариант использования. И они, кажется, не используют модели Django. Я занимался этим несколько дней и попробовал несколько из них, но не смог реализовать ни один из них. Поддвиг в правильном направлении был бы оценен.