如何从Flatter将image base64发送到Django服务器

2024-05-12 22:45:45 发布

您现在位置:Python中文网/ 问答频道 /正文

有人能帮我吗?我正在从flatter向django(python)服务器发送一个图像。我成功地从手机上拍摄了这张照片 照相机/多媒体资料,并将图像转换(编码)为base64

颤振代码:

 Future classifyImage() async{
if(imageFile==null) return;
  String base64Image = base64Encode(imageFile.readAsBytesSync());
String fileName = imageFile.path.split("/").last;
http.post(phpEndPoint, body:
{
  "image" : base64Image,
  //"name" : fileName,
}).then((res) {
  print(res.body);
}).catchError((err) {
  print(err);
//print(base64Image);
//print(fileName);
});
}

here is the converted string in flutter by base64

/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQICAQEBAQMCAgICAwMEBAMDAwMEBAYFBAQFBAMDBQcFBQYGBgYGBAUHBwcGBwYGBgb/2wBDAQEBAQEBAQMCAgMGBAMEBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgb/wAARCAPXAy0DASIAAhEBAxEB/8QAHwAAAgICAwEBAQAAAAAAAAAABgcEBQMIAAIJAQoL/8QAaBAAAQMDAwIEAwQFBwQJEAITAQIDEQAEIQUSMQZBEyJRYQcycRRCgZEICSNSoRUzYnKxtMEWN3bRCiRDZHSChJLwFyY2U1ZjZWZzhZSipbO14Sc0NUR1g5WkGEWTJSg4RkdXWHej8f/EABcBAQEBAQAAAAAAAAAAAAAAAAACAQP/xAAaEQEAAwEBAQAAAAAAAAAAAAAAAgMyATER/9oADAMBAAIRAxEAPwDzr/2W4wXv0yf0cSCRH6MDY/8Abuo1+SpOmqUoJEyTzX66/wDZZbC3v0x/0dClBUB+jG3JA/8ADmo1+U6ysFF9uWiM+lXZvqY5DbfTDy07hvIA4FW+n9E3Nw4ghLme4px6ZpqC2NyEkd5FMbp/SrfcgKQ2M+lQomrHogtIAcSQoeoq7Z6SS2UmAY4pwa1Zhq6CGmgRnKRUZixddKR4RAjPloAS20YNH5AcZxV41aBsD9mD6YpgWnTy3YBQoe8VeNdIKWAYI9hQK9Ol/avOGgkTkRU9jQCCP2ZwKbNv019nSEFAk8kirVnQgIGz+FAqWNBOPJ/CrRvQDM7DEelNpnQhjyfhFWzegDEJ+hIoF7pekFpopKYxgRVujTck7e1HrOjBsQUYqa1pSceWgB2dLKgPKffFWKNJMfIaOmdMAgBP8KsEaanAKe1AGWmn7EREGPSpYssj/VRWLMIJAQRHEiu6bOe0fhQDKbPvH8KzC0BE8fhRKizjEc94rKLIA8A+o20

现在,问题是在django服务器中接收的字符串与在颤振中转换的字符串不同

here is the string which is received in django server

Python代码:

@csrf_exempt
def android_predict(request):
try : 
    print('Request method is : ' + request.method)
    if request.method == 'POST' :
        print('method is POST')
        print('Body is : ' + str(request.body))
        decoded = request.body.decode("UTF-8")
        print(decoded)
        name_image = decoded.split('&')[1].split('=')[1]
        print('name is : ' + name_image)
        b64_image = decoded.split('&')[0].split('=')[1]
        print('Base64 image is : ' + b64_image)
        missing_padding = len(b64_image)%4
        print('Length is : ' + str(len(b64_image)))
        if missing_padding : 
            b64_image += '='*(4-missing_padding)
        print('Modified Base64 image is : ' + b64_image)
        print('New length is : ' + str(len(b64_image)))
        image = PIL.Image.open(io.BytesIO(base64.b64decode(b64_image)))
        target_image = image.resize((500,500),PIL.Image.ANTIALIAS)
        print(type(target_image))
        image_array = np.array(target_image)
        image_file, x1 = predict_image(image_array,name_image)
        # image = PIL.Image.open(io.BytesIO(b64_image))
        context_dict = {'statusCode' : 0, 'statusMessage' : 'working', 'prediction' : x1}
    else :
        print('method is GET')
        context_dict = {'statusCode' : 1, 'statusMessage' : 'request type is not post'}
    print(context_dict)
    return JsonResponse(context_dict, safe=False)
except : 
    context_dict = {'statusCode' : 1, 'statusMessage' : 'exception occurred'}
    print(context_dict)
    return JsonResponse(context_dict, safe=False)

Tags: djangonameimageifisrequestcontextbody
1条回答
网友
1楼 · 发布于 2024-05-12 22:45:45

当您以base64字符串发送到服务器时,转换编码urlencode

var encoded = Uri.encodeFull(base64String);

并在服务器中转换字符串值

urldecording->;基线解编码

相关问题 更多 >