Флаттер, отправляющий данные в API (изображение и форма)

#flutter #flutter-layout #flutter-dependencies #flutter-web #flutter-animation

Вопрос:

Я могу отправлять изображения в API, но в случае, если данные формы не загружаются в API, можете ли вы мне помочь?

 final String uploadUrl = 
 'https://demo.likemyfiles.com/DS/api/api_supervisor/upload_attend_selfie';
var res = await uploadImage(_imageFile.path, uploadUrl);
 

Изображение загружается через API, но форма не

 Future<String> uploadImage(filepath, url) async {
   // No issue in the keyWords
  Map mapeddate ={
  'date':"23-07-2021",
  'time':"05:37",
  'lat':"28.535517",
  'lng':"77.391029",
  'location':"Noida Sector 51 Gautam Buddh Nagar India, 201303",
  'activity_id':"4",
  'supervisor_id':"3",
};
var request = http.MultipartRequest('POST', Uri.parse(url));
request.files.add(await http.MultipartFile.fromPath('userfile', filepath));
var res = await request.send();
return res.reasonPhrase;
}
 

Ответ №1:

Используя MultipartRequest , вы можете и добавить данные формы как fields .

 var uri = Uri.parse('https://example.com/create');
Map mapeddate ={
  'date':"23-07-2021",
  'time':"05:37",
  'lat':"28.535517",
  'lng':"77.391029",
  'location':"Noida Sector 51 Gautam Buddh Nagar India, 201303",
  'activity_id':"4",
  'supervisor_id':"3",
};
var request = http.MultipartRequest('POST', uri)
  ..fields = mapedDate
  ..files.add(await http.MultipartFile.fromPath(
      'userfile', filepath,
      contentType: MediaType('image', 'jpeg')));
var response = await request.send();
if (response.statusCode == 200) print('Uploaded!');
 

Этот пример взят из документации и адаптирован к вашему вопросу.

Ответ №2:

Пакет HTTP не может отправлять данные формы, и вам следует использовать пакет Dio

 var formData = FormData.fromMap({
  'name': 'wendux',
  'age': 25,
  'file': await MultipartFile.fromFile('./text.txt', filename: 'upload.txt'),
 
});
var response = await dio.post('/info', data: formData);
 

Комментарии:

1. Можете ли вы объяснить, почему вы использовали это». /text.txt’ ‘/информация’

2. ./text.txt это образец, и вы должны указать адрес своего файла, а /info также URL-адрес вашего API

3. Здесь есть сообщение Reddit на http vs Dio, я думаю, что стоит подумать об этом, прежде чем добавлять дополнительные зависимости,

4. да, вы правы, но каждый подобный пакет имеет свои преимущества и недостатки, и вы должны сделать правильный выбор между ними в соответствии с требованиями вашего проекта. я предпочитаю использовать Dio для загрузки/выгрузки (FormData) и использовать HTTP для простых запросов (JSON).