Voici mon code MultiPartRequest
var responseByteArray = await response.stream.toBytes().timeout(const Duration(seconds: 15));
Je sais comment définir un délai d'expiration pour une requête http normale. J'ai suivi ce lien
Définir le délai d'expiration pour la requête HTTPClient get ()
J'ai essayé d'ajouter la fonction de délai d'expiration des manières suivantes, mais cela ne fonctionnera pas et ma demande est terminée
1.
http.StreamedResponse response = await request.send().timeout(const Duration(seconds: 1));
3 Réponses :
Je suggère que
var request = http.MultipartRequest("POST", Uri.parse(EMPLOYEE_PUNCH_IN_URL));
request.fields['uid'] = userId;
request.fields['location'] = location;
request.fields['punchin_time'] = punchInTime;
request.fields['punchin_location_name'] = address;
var multiPartFile = await http.MultipartFile.fromPath(
"photo", imageFile.path,
contentType: MediaType("image", "$extension"));
request.files.add(multiPartFile);
await request.send().timeout(Duration(seconds: 1), onTimeout: () {
throw "TimeOut";
}).then((onValue) {
var responseByteArray = await onValue.stream.toBytes();
employeePunchInModel = standardSerializers.deserializeWith(
EmployeePunchInModel.serializer,
json.decode(utf8.decode(responseByteArray)));
}).catchError((){ throw "TimeOut";});
Je vais essayer
Je reçois une erreur firebasestorage.googleapis.com/v0/b/…
@Nudge .. J'ai édité var responseByteArray = wait onValue.stream.toBytes ();
Ne marche pas. J'ai essayé votre solution. Comme vous pouvez le voir dans la deuxième étape que j'ai mentionnée dans la question, j'utilisais la même solution que vous avez décrite. Peut-être que le délai d'expiration ne fonctionne pas pour http en plusieurs parties. Je suppose que j'ai besoin de déposer un bug
hé, vous pouvez également utiliser dio 3.0.4
Un client Http puissant pour Dart, qui prend en charge les intercepteurs, la configuration globale, FormData, l'annulation des demandes, le téléchargement de fichiers, le délai d'expiration, etc.
Voici le lien: Client Http pour Dart
Utilisez le package Dio avec le code suivant:
try {
final response = await Dio().post(requestFinal.item1, data:formData, options: option,
onSendProgress: (sent, total) {
print("uploadFile ${sent / total}");
});
print("Response Status code:: ${response.statusCode}");
if (response.statusCode >= 200 && response.statusCode < 299) {
dynamic jsonResponse = response.data;
print("response body :: $jsonResponse");
final message = jsonResponse["msg"] ?? '';
final status = jsonResponse["status"] ?? 400;
final data = jsonResponse["data"];
return HttpResponse(status: status, errMessage: message, json: data);
}
else {
dynamic jsonResponse = response.data;
print('*********************************************************');
print("response body :: $jsonResponse");
print('*********************************************************');
var errMessage = jsonResponse["msg"];
return HttpResponse(status: response.statusCode, errMessage: errMessage, json: jsonResponse);
}
}
on DioError catch(error) {
print('*********************************************************');
print('Error Details :: ${error.message}');
print('*********************************************************');
dynamic jsonResponse = error.response.data;
print('*********************************************************');
print("response body :: $jsonResponse");
print('*********************************************************');
var errMessage = jsonResponse["message"] ?? "Something went wrong";
return HttpResponse(status: jsonResponse["status"] , errMessage: errMessage, json: null);
}
Hope cela aide!
Je connais la bibliothèque Diorites mais je ne peux pas l'utiliser car c'est mon projet de bureau et mon chef d'équipe ne l'autorise pas à l'utiliser
L'option 1 définit un délai d'expiration pour la création de la requête en plusieurs parties à partir du fichier. Donc, si par exemple. c'est un gros fichier qui prend beaucoup de temps à lire ou que l'E / S du périphérique est lente, il expirera avant que la requête ne soit générée. L'option 2 définit un délai d'attente à la réception des en-têtes de réponse. Cela signifie généralement que le serveur a reçu et traité l'intégralité de la demande et a répondu avec un code d'état. L'option 3 définit un délai d'attente à la réception du reste de la réponse - le corps de la réponse. Sur quoi voulez-vous réellement définir un délai d'expiration?
@Ovidiu Je veux définir un délai d'expiration pour ma requête http qui va au serveur
C'est l'option 2 alors. Si le serveur ne reçoit, ne lit et ne traite pas l'intégralité de la demande, puis répond avec un code d'état HTTP qui revient à l'application, le tout dans le délai imparti, cela sera considéré comme un délai d'expiration.
S'agit-il de C #?
@Momoro C'est à propos du langage Dart et du framework Flutter
Eh bien, j'ai trouvé ceci: github.com/lejard-h/chopper/issues/49 < / a> (c'est
fléchette, mais enhacheur)