Как передать файл изображения в многочастных запросах в качестве параметра тела http(POST)

#json #flutter #api #dart

Вопрос:

Я получаю изображение из своей галереи, теперь хочу использовать это изображение как в параметрах тела Http с помощью Multipart запроса. Я не смог понять, что я должен передать для изображения в составном запросе.

Моя переменная image содержит изображение моей галереи после вызова метода.

   final ImagePicker _picker = ImagePicker();
  File? image;
  var fileContent;
  var fileContentBase64;
 

Отображение изображения в моем приложении

    Padding(
       padding: const EdgeInsets.all(18.0),
          child: image == null? Text("No file chosen"): Image.file(
                              File(image!.path),
                              width: 150,
                              fit: BoxFit.cover,
                            ),
                    ),
 

Функция для получения изображения из галереи

 void filePicker() async {
final File? selectedImage =
    await ImagePicker.pickImage(source: ImageSource.gallery);
print(selectedImage!.path);
setState(() {
  image = selectedImage;
  
   fileContent = image!.readAsBytesSync();
   fileContentBase64 = base64.encode(fileContent); 
});
}
 

Теперь в функции Api, как я должен ее использовать ?

   Future<void> SaveCustomTestBooking() async {


var jsonResponse;
if (EncUserId.isNotEmpty) {
   var postUri = Uri.parse("http://myAPIstomTestBooking");
  var request  = http.MultipartRequest('POST',postUri);
  request.fields['VisitDate'] = '_selectedDate';
  request.fields['EncUserId'] = 'EncUserId';

    request.files.add(new http.MultipartFile.fromBytes(
    "UserFile", File(image!.path).readAsBytesSync(),
    filename:"Image.jpg",
    contentType: MediaType('image', 'jpg')));

   request.send().then((response){
     if (response.statusCode == 200) {

       print("Uploaded!");
        Navigator.push(context, MaterialPageRoute(builder: (context) => DieticianAfterDateSelectPage(rresponse:DieticianEncBookingIdModel.fromJson(jsonResponse),)));
       
   } else {
    ScaffoldMessenger.of(context).showSnackBar(
        SnackBar(content: Text("Somthing went wrong")));
    throw Exception("Faild to fetch");

   }
   }


   );}
 

}

Ответ №1:

Вот пример кода использования изображения, как в параметрах тела Http, с использованием составного запроса.

   request.files.add(new http.MultipartFile.fromBytes(
        "thumbnail", File(thumbnailImage.path).readAsBytesSync(),
        filename:"Image.jpg",
        contentType: MediaType('image', 'jpg')));
 

здесь «миниатюра» — это ключевое слово json. используй свой собственный. Спасибо