J'ai vu d'autres questions, mais ce n'est pas ce que je veux, je ne veux pas télécharger une image sur un serveur, je ne veux pas convertir en base64 ...
Je veux seulement publier un fichier sous forme de données de formulaire ou autre et obtenir les informations retournées.
j'ai cela, mais n'a pas fonctionné:
void onTakePictureButtonPressed() {
takePicture().then((String filePath) {
if (mounted) {
setState(() {
imagePath = filePath;
videoController?.dispose();
videoController = null;
});
http.post('http://ip:8082/composer/predict', headers: {
"Content-type": "multipart/form-data",
}, body: {
"image": filePath,
}).then((response) {
print("Response status: ${response.statusCode}");
print("Response body: ${response.body}");
});
if (filePath != null) showInSnackBar('Picture saved to $filePath');
}
});
}
La méthode la plus simple serait de poster une requête en plusieurs parties comme dans ce message puis de la poster sur le serveur.
Assurez-vous de les importer au début du fichier:
import 'package:path/path.Dart';
import 'package:async/async.Dart';
import 'Dart:io';
import 'package:http/http.Dart' as http;
import 'Dart:convert';
Ajoutez cette classe quelque part dans votre code:
upload(File imageFile) async {
// open a bytestream
var stream = new http.ByteStream(DelegatingStream.typed(imageFile.openRead()));
// get file length
var length = await imageFile.length();
// string to uri
var uri = Uri.parse("http://ip:8082/composer/predict");
// create multipart request
var request = new http.MultipartRequest("POST", uri);
// multipart that takes file
var multipartFile = new http.MultipartFile('file', stream, length,
filename: basename(imageFile.path));
// add file to multipart
request.files.add(multipartFile);
// send
var response = await request.send();
print(response.statusCode);
// listen for response
response.stream.transform(utf8.decoder).listen((value) {
print(value);
});
}
Téléchargez ensuite en utilisant:
upload(File(filePath));
Dans votre code:
void onTakePictureButtonPressed() {
takePicture().then((String filePath) {
if (mounted) {
setState(() {
imagePath = filePath;
videoController?.dispose();
videoController = null;
});
// initiate file upload
Upload(File(filePath));
if (filePath != null) showInSnackBar('Picture saved to $filePath');
}
});
}
import 'package:dio/dio.Dart'; //From 3.x.x version
uploadImage(){
var formData = FormData();
formData.files.add(MapEntry("Picture", await MultipartFile.fromFile(data.foto.path, filename: "pic-name.png"), ));
var response = await dio.client.post('v1/post', data: formdata);
}