Flutter WEB отправляет файл на бэкенд Django Rest Framework

Итак, в моем фронт-энде (WEB). Я использую пакеты Image_picker и затем image_cropper для получения файла.

Я знаю, что flutter web не поддерживает Dart/io, поэтому вместо этого нужно отправить изображение в многокомпонентном запросе FromBYtes. Обычно для приложений ios/android flutter можно использовать fromFile. Теперь я отправляю изображение на бэкенд в виде байтов. Однако, мое представление на базе django rest framework не может сохранить изображение в мою модель.

вот код и шаг за шагом:

final imagetoSendToAPIasbytes = await cropImageFile.readAsBytes();
List<int> imageaslistint = imagetoSendToAPIasbytes.cast();

final response = await uploadImage(imageaslist,  profileid);

функция загрузки изображения:

var profilepic = await http.MultipartFile.fromBytes(
          "profilepic", imageaslistint);
request.files.add(profilepic);
http.StreamedResponse response = await request.send();

var responseByteArray = await response.stream.toBytes();

Конечно, это не полный код. Но я могу отправить его в back end. Мой django backend view для обработки:

@api_view(['PATCH', ])
@throttle_classes([updateprofileprofilepicThrottle])
@parser_classes((MultiPartParser, FormParser, JSONParser))
def updateprofileprofilepic(request,):
    try:
        user = request.user
    except User.DoesNotExist:
        return Response(status=status.HTTP_404_NOT_FOUND)

    try:
        if request.method == "PATCH":
            
            profileobjid= json.loads(request.data['profileid'])
            
            profileobj = Profile.objects.get(creator = user, id = profileobjid)
            
            profileobj.profilepic.delete(False)
            
            print(request.FILES['profilepic'])
            print(json.loads(request.data['profilepic']))
            profileobj.profilepic=  json.loads(request.data['profilepic'])
            profileobj.save()

обычно (request.FILES['profilepic']) позволяет мне сохранить файл (с ios/android)

однако это происходит, когда запрос отправляется как многокомпонентный request.fromPATH.

Теперь (json.loads(request.data['profilepic'])) я могу получить байты, но как мне сохранить их в IMAGE на моей модели. Спасибо, любая помощь будет оценена по достоинству

'''<QueryDict: {'profileid': ['xxxx-xxx-xxx-xxxxxe-xxxxx'], 'profilepic': ['�PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x01........'''

Итак, я разобрался. при выполнении этого вызова из Flutter WEB ВЫ ДОЛЖНЫ включить: var profilepic = await http.MultipartFile.fromBytes( "profilepic", file, filename: 'hello.png');

Имя файла. это необходимо для того, чтобы django restframework и multiformparser могли сохранить его как изображение.

Вернуться на верх