Téléchargement de Fichier
Résumé
- Nom interne :
DownloadTask - Catégorie : Communication
- Objectif : Télécharger un fichier depuis une URL distante et l'enregistrer dans un chemin local sur l'appareil Android, avec rapport des statistiques de transfert.
- Type de tâche : Normale
Compatibilité
-
Version AndroMate minimale :
1.1.0 -
Version AndroMate maximale :
1.1.0 -
Android minimum :
Android 13 (API 33) -
Android maximum testé :
Android 16 (API 36) -
Fabricants supportés :
- ✅ Samsung (One UI 6.x / 7.x / 8.x)
- ✅ Google Pixel (Android Stock)
- ⚠️ Autres fabricants — non testés
-
Permissions requises :
INTERNETACCESS_NETWORK_STATEWRITE_EXTERNAL_STORAGE
Description détaillée
La tâche Téléchargement de Fichier ouvre une connexion HTTP/HTTPS vers l'url spécifiée et diffuse le corps de la réponse vers le fichier local indiqué par path, en utilisant OkHttp via FileTransferClient.downloadToFile(). L'appel est asynchrone et attend le callback. La progression est journalisée sous la forme bytes/totalBytes dans le rapport de la tâche.
url et path supportent les références $variable_workflow — résolues à l'exécution avant le début du transfert. L'opération est limitée par timeout_ms. Si le délai est dépassé, une AndromateTimeoutException est levée. Si le transfert échoue pour toute autre raison, l'exception DOWNLOAD-UPLOAD-ERROR-001 est levée.
En cas de succès, la tâche écrit la taille du fichier, la durée du transfert et le débit dans les trois variables de sortie issues de TransferStatResult.
Paramètres d'entrée
| Paramètre | Type | Obligatoire | Valeurs possibles | Compatibilité Android | Compatibilité AndroMate | Défaut |
|---|---|---|---|---|---|---|
url |
Chaîne | Oui | URL HTTP/HTTPS valide — supporte les références $variable |
Android 13 (API 33) → Android 16 (API 36) | 1.1.0 → 1.1.0 | "" |
path |
Chaîne | Oui | Chemin local absolu (ex. /sdcard/Download/fichier.zip) — supporte les références $variable |
Android 13 (API 33) → Android 16 (API 36) | 1.1.0 → 1.1.0 | "" |
timeout_ms |
Long | Non | Délai d'attente en millisecondes | Android 13 (API 33) → Android 16 (API 36) | 1.1.0 → 1.1.0 | 5000 |
Paramètres de sortie
| Champ | Type | Condition de déclenchement | Compatibilité Android | Compatibilité AndroMate | Défaut |
|---|---|---|---|---|---|
file_size_output |
Long | Toujours en cas de succès — taille du fichier téléchargé en octets | Android 13 (API 33) → Android 16 (API 36) | 1.1.0 → 1.1.0 | <ANDROMATE_NULL_VALUE> |
duration_ms_output |
Long | Toujours en cas de succès — durée du transfert en millisecondes | Android 13 (API 33) → Android 16 (API 36) | 1.1.0 → 1.1.0 | <ANDROMATE_NULL_VALUE> |
bitrate_output |
Double | Toujours en cas de succès — débit du transfert en octets/seconde | Android 13 (API 33) → Android 16 (API 36) | 1.1.0 → 1.1.0 | <ANDROMATE_NULL_VALUE> |
Remarque : Les variables de sortie ne sont écrites que si la variable workflow correspondante existe déjà dans le contexte d'exécution (déclarée dans la tâche Start).
Exceptions
| Code | Déclenchement |
|---|---|
DOWNLOAD-UPLOAD-ERROR-001 |
Erreur de transfert de fichier (depuis AndromateExceptionTypes.FILE_TRANSFER_ERROR). Levée lors de tout échec de téléchargement. |
| Timeout | AndromateTimeoutException — l'opération a dépassé timeout_ms. Aucun code d'exception spécifique. |
Diagramme d'exécution
flowchart TD
Start([▶ DownloadTask]) --> ResolveParams[🔄 Résoudre url + path\n+ timeout_ms]
ResolveParams --> CallClient[🌐 FileTransferClient.downloadToFile\nOkHttp — asynchrone]
CallClient --> WaitCallback[⏳ Attendre le callback asynchrone]
WaitCallback -->|timeout_ms dépassé| ETimeout[❌ Timeout\nAndromateTimeoutException]
WaitCallback -->|Erreur de transfert| E1[❌ DOWNLOAD-UPLOAD-ERROR-001\nErreur de transfert]
WaitCallback -->|Succès| WriteOutputs[💾 Écrire TransferStatResult\nfile_size_output\nduration_ms_output\nbitrate_output]
WriteOutputs --> Success([✅ TransferStatResult])
ETimeout --> Error([❌ Exception])
E1 --> Error
style Start fill:#e3f2fd
style Success fill:#c8e6c9
style Error fill:#ffcdd2
style ETimeout fill:#ffcdd2
style E1 fill:#ffcdd2
style ResolveParams fill:#fff9c4
style CallClient fill:#f3e5f5
style WaitCallback fill:#f3e5f5
style WriteOutputs fill:#c8e6c9
Fonctionnement :
- Résoudre les paramètres :
url,pathettimeout_mssont résolus depuis le contexte workflow - Appeler FileTransferClient : invoque
FileTransferClient.downloadToFile()via OkHttp — appel asynchrone - Attendre le callback : bloque jusqu'à ce que le callback asynchrone se déclenche ou que
timeout_mssoit dépassé - En cas de timeout : lève
AndromateTimeoutException - En cas d'erreur : lève
DOWNLOAD-UPLOAD-ERROR-001(erreur de transfert de fichier) - En cas de succès : écrit
file_size_output,duration_ms_outputetbitrate_outputdepuisTransferStatResult - Résultat : retourne
TransferStatResult
Exemples de code
Exemple 1 — Télécharger un fichier avec le délai par défaut
{
"DownloadTask": [
{
"id": "1",
"title": "Télécharger firmware",
"url": "https://example.com/firmware.zip",
"path": "/sdcard/Downloads/firmware.zip",
"file_size_output": "$octets_telecharges",
"duration_ms_output": "$duree_dl_ms",
"bitrate_output": "$debit_dl"
}
]
}
Exemple 2 — Télécharger avec variables de workflow
{
"DownloadTask": [
{
"id": "2",
"title": "Télécharger cible dynamique",
"url": "$url_telechargement",
"path": "$chemin_local",
"file_size_output": "$taille_fichier",
"duration_ms_output": "$temps_dl",
"bitrate_output": "$debit"
}
]
}
Exemple 3 — Télécharger avec délai personnalisé
{
"DownloadTask": [
{
"id": "3",
"title": "Télécharger avec délai 30s",
"url": "https://example.com/large-dataset.csv",
"path": "/sdcard/data/dataset.csv",
"timeout_ms": 30000,
"file_size_output": "$taille_csv",
"duration_ms_output": "$csv_dl_ms",
"bitrate_output": "$csv_debit"
}
]
}
Exemple 4 — Télécharger et mesurer la vitesse
{
"DownloadTask": [
{
"id": "4",
"title": "Test de vitesse de téléchargement",
"url": "https://example.com/testfile.bin",
"path": "/sdcard/Downloads/testfile.bin",
"timeout_ms": 15000,
"file_size_output": "$octets_recus",
"duration_ms_output": "$elapsed_ms",
"bitrate_output": "$vitesse_bps"
}
]
}
Détails des paramètres d'entrée
1. url — URL de téléchargement
L'URL HTTP ou HTTPS complète de la ressource distante à télécharger. Doit être une URL non vide et bien formée incluant le schéma (http:// ou https://).
Supporte les références $variable_workflow — résolues à l'exécution avant le début du transfert.
| Valide | Invalide |
|---|---|
https://example.com/file.zip |
file.zip (pas de schéma) |
http://192.168.1.1/data.bin |
ftp://example.com/file (schéma non supporté) |
$url_telechargement |
"" (vide) |
- Défaut :
""
2. path — Chemin local de destination
Le chemin absolu sur l'appareil Android où le fichier téléchargé sera sauvegardé. Le répertoire parent doit exister et l'application doit avoir les droits d'écriture.
- Doit être absolu : les chemins ne commençant pas par
/ne sont pas valides - Le répertoire parent doit exister : la tâche ne crée pas les répertoires intermédiaires manquants
- Supporte les variables : Oui — ex.
/sdcard/$nom_fichier - Défaut :
""
3. timeout_ms — Délai d'opération
Temps maximum en millisecondes alloué à l'ensemble de l'opération de téléchargement (connexion et transfert de données inclus). Si dépassé, une AndromateTimeoutException est levée.
- Type : Long
- Défaut :
5000(5 secondes) - Pour les fichiers volumineux : augmenter à
30000ou plus pour éviter les timeouts prématurés
Détails des paramètres de sortie
file_size_output — Taille du fichier téléchargé
Stocke la taille totale du fichier téléchargé en octets (Long), issue de TransferStatResult, dans la variable workflow spécifiée.
- Écrit uniquement en cas de succès
- Valeur = nombre d'octets écrits sur le disque (ex.
204800pour 200 Ko)
duration_ms_output — Durée du transfert
Stocke le temps total écoulé pendant l'opération de téléchargement en millisecondes (Long), issu de TransferStatResult.
- Mesuré depuis le début du transfert jusqu'au dernier octet écrit sur le disque
bitrate_output — Débit du transfert
Stocke le débit de transfert mesuré en octets par seconde (Double), issu de TransferStatResult.
- Calculé comme
taille_fichier / (duration_ms / 1000.0) - Utile pour les rapports de débit réseau