Flutter: http post télécharger une image
- Je utiliser un web service pour le traitement de l'image , il fonctionne bien dans Postman:
Maintenant je veux faire la requête http dans le flutter avec Dart:
import 'package:http/http.dart' as http;
static ocr(File image) async {
var url = '${API_URL}ocr';
var bytes = image.readAsBytesSync();
var response = await http.post(
url,
headers:{ "Content-Type":"multipart/form-data" } ,
body: { "lang":"fas" , "image":bytes},
encoding: Encoding.getByName("utf-8")
);
return response.body;
}
mais je ne sais pas comment faire pour télécharger le fichier de l'image, dans le code ci-dessus-je obtenir de l'exception: Bad state: Cannot set the body fields of a Request with content-type "multipart/form-data".
Comment dois-je rédiger le corps de la demande?
pour une solution de contournement: - je demander à mon serveur les gars pour changer de serveur de l'api à accepter encodées en base64 image à la place. alors j'ai mis la
Question similaire, la réponse ici stackoverflow.com/questions/44841729/...
Je ne veux pas envoyer encodé en base 64 octets
cette réponse m'a aidé stackoverflow.com/a/49645074/6133481
base64
image encodée comme une chaîne de caractères dans le corps avec un type de contenu de l'en-tête égal à application/x-www-form-urlencoded
et il fonctionne.Question similaire, la réponse ici stackoverflow.com/questions/44841729/...
Je ne veux pas envoyer encodé en base 64 octets
cette réponse m'a aidé stackoverflow.com/a/49645074/6133481
OriginalL'auteur Mneckoee | 2018-03-06
Vous devez vous connecter pour publier un commentaire.
Votre solution de contournement devrait fonctionner; de nombreux serveurs accepter application/x-www-form-urlencoded comme une alternative (même si les données sont codées modérément inefficace).
Cependant, il est possible d'utiliser dart:http pour ce faire. Au lieu d'utiliser
http.post
, vous aurez envie d'utiliser unhttp.MultipartFile
objet.De la dart de la documentation:
Merci @Kiana, je ne l'ai pas remarqué. C'est corrigé maintenant. Bien que la
master
de dart.http est bien différent de celui actuellement relâchés 0.11.3+16, donc je m'attends à ce que cela finit par devenir incorrect.OriginalL'auteur rmtmckenzie
Je voudrais recommander dio paquet pour vous , dio est un puissant client Http pour Dart/Flutter, qui prend en charge les Intercepteurs, FormData, de Demander l'Annulation, le Téléchargement de Fichier, le Délai d'attente etc.
dio est très facile à utiliser, dans ce cas vous pouvez:
Envoi FormData:
Plus de détails, veuillez vous référer à dio。
OriginalL'auteur wendu
Ceci peut être réalisé à l'aide de la MultipartRequest classe (https://docs.flutter.io/flutter/package-http_http/MultipartRequest-class.html)
Changer le type de support et d'uri en tant que de besoin.
OriginalL'auteur Peem