Cette rubrique s'appuie sur le fichier de démonstration ./demos/mqtt_upload_basic_demo.c du Link SDK pour C pour expliquer comment utiliser les API du Link SDK afin de télécharger des fichiers vers IoT Platform via MQTT, réduisant ainsi la consommation de ressources matérielles et les coûts de développement.
Contexte
Pour obtenir une vue d'ensemble de la fonctionnalité de téléchargement de fichiers, consultez la section Vue d'ensemble du téléchargement de fichiers.
La fonctionnalité de téléchargement de fichiers repose sur des connexions MQTT. Pour des exemples de code de connexion MQTT, consultez la section Connexion à IoT Platform via MQTT.
Étape 1 : Initialiser le téléchargement de fichiers
-
Ajoutez les fichiers d'en-tête.
…… …… #include "aiot_mqtt_api.h" #include "aiot_mqtt_upload_api.h" #include "core_crc64.h" …… -
Configurez les dépendances sous-jacentes et la sortie des journaux.
/* A collection of system adaptation functions located in the portfiles/aiot_port/ directory. */ extern aiot_sysdep_portfile_t g_aiot_sysdep_portfile; /* The server certificate located in external/ali_ca_cert.c. */ extern const char *ali_ca_cert; /* The log callback, where SDK logs are output. */ static int32_t demo_state_logcb(int32_t code, char *message) { printf("%s", message); return 0; } -
Appelez aiot_mqtt_upload_init pour créer une instance de client de téléchargement de fichiers et initialiser ses paramètres par défaut.
mqtt_handle = aiot_mqtt_upload_init();
Étape 2 : Configurer le téléchargement de fichiers
Appelez aiot_mqtt_upload_setopt pour configurer les options suivantes.
-
Associez le handle de connexion MQTT.
ImportantAvant de configurer les paramètres de la fonctionnalité de téléchargement de fichiers, assurez-vous d'avoir configuré les informations d'authentification de l'appareil et les paramètres associés. Configurer les paramètres de connexion MQTT.
Les requêtes de téléchargement de fichiers utilisent des connexions MQTT. Associez le handle de connexion MQTT à cette option.
void *up_handle = aiot_mqtt_upload_init(); aiot_mqtt_upload_setopt(up_handle, AIOT_MQTT_UPLOADOPT_MQTT_HANDLE, mqtt_handle); -
(Facultatif)
Configurez les paramètres de téléchargement de fichiers.
-
Exemple de code :
uint32_t rsp_timeout = 2000; aiot_mqtt_upload_setopt(up_handle, AIOT_MQTT_UPLOADOPT_RSP_TIMEOUT_MS, &rsp_timeout); uint32_t rety_count = 5; aiot_mqtt_upload_setopt(up_handle, AIOT_MQTT_UPLOADOPT_RETRY_COUNT, &rety_count); uint32_t block_size = 1024; aiot_mqtt_upload_setopt(up_handle, AIOT_MQTT_UPLOADOPT_DEFAULT_BLOCK_SIZE, &block_size); -
Paramètres :
Paramètre
Description
rsp_timeout
Délai d'expiration pour la retransmission de chaque bloc de données, en millisecondes.
Valeur par défaut : 5 000 ms (5 secondes). Définissez sur 0 pour utiliser la valeur par défaut.
Exemple de valeur : 2 000 ms.
AIOT_MQTT_UPLOADOPT_RSP_TIMEOUT_MS
Définit le délai d'expiration pour la retransmission de chaque bloc de données lors du téléchargement de fichiers.
rety_count
Nombre de tentatives en cas d'expiration.
Valeur par défaut : 10.
Exemple de valeur : 5.
AIOT_MQTT_UPLOADOPT_RETRY_COUNT
Définit le nombre de tentatives en cas d'expiration lors du téléchargement de fichiers.
block_size
Taille maximale de chaque bloc de données, en octets.
Plage valide : 256–131 072. Valeur par défaut : 2 048 octets.
Exemple de valeur : 1 024 octets.
AIOT_MQTT_UPLOADOPT_DEFAULT_BLOCK_SIZE
Définit la taille maximale de chaque bloc de données envoyé lors du téléchargement de fichiers.
-
(Facultatif) Étape 3 : Calculer la somme de contrôle CRC64
Par défaut, le protocole effectue un calcul CRC16 sur chaque bloc de données. Vous pouvez également utiliser CRC64 pour valider l'intégrité du fichier entier. Le SDK inclut une bibliothèque C pour le calcul CRC64.
Le code suivant calcule la somme de contrôle CRC64 pour un fichier :
uint64_t crc = mqtt_upload_get_file_crc64(MQTT_UPLOAD_FILE_NAME);
Étape 4 : Demander un téléchargement de fichier
-
Appelez aiot_mqtt_upload_open_stream pour envoyer une requête de téléchargement de fichier à IoT Platform.
ImportantLors du téléchargement d'un fichier, n'appelez pas aiot_mqtt_upload_open_stream plusieurs fois pour le même fichier. Si un téléchargement échoue, vous pouvez renvoyer la requête pour le reprendre.
Lors du téléchargement de différents fichiers, vous pouvez appeler aiot_mqtt_upload_open_stream plusieurs fois. Le SDK prend en charge le téléchargement simultané de plusieurs fichiers.
-
Exemple de code :
-
Définissez les tailles et les noms des fichiers :
#define MQTT_UPLOAD_FILE_SIZE (2 * 1024) #define MQTT_UPLOAD_FILE_NAME ("mqttuploadfile001.txt") #define MQTT_UPLOAD_FILE_SIZE2 (1 * 1024 + 127) #define MQTT_UPLOAD_FILE_NAME2 ("mqttuploadfile002.txt") -
Envoyez des requêtes pour télécharger les fichiers :
uint32_t test_userdata = 100; aiot_mqtt_upload_open_stream(up_handle, MQTT_UPLOAD_FILE_NAME, MQTT_UPLOAD_FILE_SIZE, AIOT_MQTT_UPLOAD_FILE_MODE_OVERWRITE, &crc, mqtt_upload_read_data_handler, &test_userdata); mqtt_upload_create_upload_file(MQTT_UPLOAD_FILE_NAME2, MQTT_UPLOAD_FILE_SIZE2); aiot_mqtt_upload_open_stream(up_handle, MQTT_UPLOAD_FILE_NAME2, MQTT_UPLOAD_FILE_SIZE2, AIOT_MQTT_UPLOAD_FILE_MODE_OVERWRITE, NULL, mqtt_upload_read_data_handler, NULL);
-
-
Description de l'exemple de code :
-
L'exemple de code appelle cette API pour télécharger deux fichiers simultanément :
mqttuploadfile001.txtetmqttuploadfile002.txt.Important-
Les noms de fichiers sont soumis aux restrictions suivantes :
Ils ne doivent contenir que des chiffres, des lettres, des traits de soulignement (_) et des points (.).
Ils doivent commencer par un chiffre ou une lettre.
Leur longueur doit être inférieure ou égale à 100 octets.
La taille maximale du fichier est de 16 Mo.
-
Le fichier
mqttuploadfile001.txtutilise la validation CRC64 et transmet le paramètreuserdata.Le fichier
mqttuploadfile002.txtn'utilise pas la validation CRC64 et aucun paramètreuserdatan'est transmis.-
L'exemple de code utilise la politique de traitement overwrite. Le tableau suivant décrit les politiques de traitement disponibles.
Politique
Description
overwrite
Politique par défaut. IoT Platform supprime le fichier existant portant le même nom et conserve uniquement le fichier nouvellement téléchargé.
append
Lorsqu'un appareil envoie une requête de téléchargement de fichier, IoT Platform renvoie des informations sur tout fichier existant portant le même nom. L'appareil peut alors :
-
Si le fichier existant a été téléchargé de manière incomplète, l'appareil peut reprendre le téléchargement.
RemarqueIoT Platform ne conserve les téléchargements incomplets que pendant 24 heures.
-
Si le fichier a déjà été entièrement téléchargé, l'appareil doit utiliser la politique overwrite ou renommer le fichier local avant de le télécharger à nouveau.
reject
IoT Platform renvoie un code d'erreur indiquant que le fichier existe déjà et rejette la requête de téléchargement.
-
-
-
IoT Platform répond à la requête de téléchargement de fichier et déclenche un rappel sur l'appareil.
Dans le rappel, le SDK lit le contenu du fichier ou les données en mémoire par blocs et effectue un calcul CRC16 sur chaque bloc.
ImportantPendant le transfert par blocs, chaque bloc de données ne doit pas dépasser la valeur
AIOT_MQTT_UPLOADOPT_DEFAULT_BLOCK_SIZE. À l'exception du dernier bloc, chaque bloc doit comporter au moins 256 octets.La fonction de rappel suivante
mqtt_upload_read_data_handlerlit les données du fichier par blocs :int32_t mqtt_upload_read_data_handler(const aiot_mqtt_upload_recv_t *packet, uint8_t *data, uint32_t size, void *userdata) { int32_t read_len = 0; if (userdata != NULL) { uint32_t *test_userdata = (uint32_t *)userdata; printf("test_userdata:%d\r\n", *test_userdata); } if (packet == NULL) { return 0; } if (packet->desc.code == UPLOAD_FILE_OK) { if (data != NULL && size != 0) { uint32_t read_size = size; FILE *fp; char* file_name = packet->desc.file_name; fp = fopen(file_name, "r"); uint32_t offset = packet->desc.file_offset; fseek(fp, offset, SEEK_SET); printf("Open %s read at: %d\r\n", file_name, offset); read_len = fread(data, sizeof(uint8_t), read_size, fp); printf("Read_len: %d\r\n", read_len); fclose(fp); } } else { printf("Error code:%d, message:%s\r\n", packet->desc.code, packet->desc.message); } return read_len; } -
(Facultatif)
Pour annuler un téléchargement en cours, appelez aiot_mqtt_upload_cancel_stream.
Référence de l'API : aiot_mqtt_upload_cancel_stream.
Étape 5 : Gérer l'état du téléchargement
Pendant le téléchargement du fichier, appelez aiot_mqtt_upload_process dans une boucle pour vérifier l'état du téléchargement :
while(1) {
aiot_mqtt_upload_result_t result = aiot_mqtt_upload_process(up_handle);
if (result.code == STATE_MQTT_UPLOAD_FINISHED) {
/* Upload successful. */
printf("MQTT Upload file(%s) success\r\n", result.file_name);
uploaded_file++;
if (uploaded_file == 2) {
break;
}
} else if (result.code == STATE_MQTT_UPLOAD_FAILED ||
result.code == STATE_MQTT_UPLOAD_FAILED_TIMEOUT ||
result.code == STATE_MQTT_UPLOAD_CANCEL_FAILED ) {
/* Upload failed. */
printf("MQTT Upload file(%s) failed,res:-0x%.4X\r\n", result.file_name, -result.code);
/* Destroy the MQTT UPLOAD instance. */
} else if (result.code == STATE_MQTT_UPLOAD_CANCEL_SUCCESS) {
printf("MQTT Upload file(%s) cancel success,res:-0x%.4X\r\n", result.file_name, -result.code);
} else if (result.code == STATE_MQTT_UPLOAD_FAILED_WHOLE_CHECK) {
printf("MQTT Upload file(%s) whole file md5 failed,res:-0x%.4X\r\n", result.file_name, -result.code);
}
sleep(1);
}
Étape 6 : Désinitialiser le téléchargement de fichiers
Appelez aiot_mqtt_upload_deinit pour détruire l'instance de client de téléchargement de fichiers et libérer les ressources :
aiot_mqtt_upload_deinit(&up_handle);
Journaux côté appareil
Consultez les résultats d'exécution côté appareil.
-
Journaux de connexion :
Une connexion réussie de l'appareil à IoT Platform génère le journal suivant :
[1637138922.457][LK-0313] MQTT user calls aiot_mqtt_connect api, connect [1637138922.457][LK-032A] mqtt host: iot-******.iot-as-mqtt.unify.aliyuncs.com [1637138922.457][LK-0317] user name: LightSwitch&a18wP****** [1637138922.457][LK-0318] password: 2AE57DEEAADE002064F87DEC55EE2EDD2A1996E44BA8F5622507D1EFD6****** success to establish tcp, fd=5 local port: 57139 [1637138922.488][LK-1000] establish mbedtls connection with server(host='iot-******.iot-as-mqtt.unify.aliyuncs.com', port=[1883]) [1637138922.507][LK-1000] success to establish mbedtls connection, (cost 45247 bytes in total, max used 47983 bytes) [1637138922.654][LK-0313] MQTT connect success in 197 ms AIOT_MQTTEVT_CONNECT -
Abonnements aux rubriques de téléchargement de fichiers :
[1637138922.654][LK-2013] aiot_mqtt_upload_init init [1637138922.654][LK-0309] sub: /sys/a18wP******/LightSwitch/thing/file/upload/mqtt/init_reply [1637138922.654][LK-0309] sub: /sys/a18wP******/LightSwitch/thing/file/upload/mqtt/send_reply [1637138922.654][LK-0309] sub: /sys/a18wP******/LightSwitch/thing/file/upload/mqtt/cancel_reply -
Journaux des requêtes de téléchargement de fichiers :
L'appareil envoie des requêtes de téléchargement pour deux fichiers :
|
**Nom du fichier**
|
**Taille (octets)**
|
**Validation CRC64**
| | --- | --- | --- | |
*mqttuploadfile001.txt*
|
2048
|
Oui
| |
*mqttuploadfile002.txt*
|
1151
|
Non
|[1637138922.655][LK-0309] pub: /sys/a18wP******/LightSwitch/thing/file/upload/mqtt/init [LK-030A] > 7B 22 69 64 22 3A 22 31 22 2C 22 70 61 72 61 6D | {"id":"1","params" [LK-030A] > 73 22 3A 7B 22 66 69 6C 65 4E 61 6D 65 22 3A 22 | :{"fileName":" [LK-030A] > 6D 71 74 74 75 70 6C 6F 61 64 66 69 6C 65 30 30 | mqttuploadfile001.txt" [LK-030A] > 31 2E 74 78 74 22 2C 22 66 69 6C 65 53 69 7A 65 | ,"fileSize [LK-030A] > 22 3A 32 30 34 38 2C 22 63 6F 6E 66 6C 69 63 74 | ":2048,"conflictStrategy" [LK-030A] > 53 74 72 61 74 65 67 79 22 3A 22 6F 76 65 72 77 | :"overwrite" [LK-030A] > 72 69 74 65 22 2C 22 66 69 63 4D 6F 64 65 22 3A | ,"ficMode": [LK-030A] > 22 63 72 63 36 34 22 2C 22 66 69 63 56 61 6C 75 | "crc64","ficValue" [LK-030A] > 65 22 3A 22 66 34 38 66 34 33 37 64 35 35 64 34 | :"f48f437d55** [LK-030A] > 37 31 34 63 22 7D 7D | ****"}} [1637138922.655][LK-0309] pub: /sys/a18wP******/LightSwitch/thing/file/upload/mqtt/init [LK-030A] > 7B 22 69 64 22 3A 22 32 22 2C 22 70 61 72 61 6D | {"id":"2","params" [LK-030A] > 73 22 3A 7B 22 66 69 6C 65 4E 61 6D 65 22 3A 22 | :{"fileName":" [LK-030A] > 6D 71 74 74 75 70 6C 6F 61 64 66 69 6C 65 30 30 | mqttuploadfile002.txt" [LK-030A] > 32 2E 74 78 74 22 2C 22 66 69 6C 65 53 69 7A 65 | ,"fileSize [LK-030A] > 22 3A 31 31 35 31 2C 22 63 6F 6E 66 6C 69 63 74 | ":1151,"conflictStrategy" [LK-030A] > 53 74 72 61 74 65 67 79 22 3A 22 6F 76 65 72 77 | :"overwrite" [LK-030A] > 72 69 74 65 22 7D 7D | }} -
Journaux des réponses de téléchargement de fichiers :
Journaux de réponse pour les deux fichiers :
-
mqttuploadfile001.txt
[1637138923.214][LK-0309] pub: /sys/a18wP******/LightSwitch/thing/file/upload/mqtt/init_reply [LK-030A] < 7B 22 63 6F 64 65 22 3A 32 30 30 2C 22 64 61 74 | {"code":200,"data" [LK-030A] < 61 22 3A 7B 22 66 69 6C 65 4E 61 6D 65 22 3A 22 | :{"fileName":" [LK-030A] < 6D 71 74 74 75 70 6C 6F 61 64 66 69 6C 65 30 30 | mqttuploadfile001.txt" [LK-030A] < 31 2E 74 78 74 22 2C 22 75 70 6C 6F 61 64 49 64 | ,"uploadId [LK-030A] < 22 3A 22 6B 54 48 76 63 47 45 31 78 58 56 48 33 | ":"kTHvcGE1xXVH3 [LK-030A] < 46 79 44 4C 34 4C 55 30 31 30 32 30 30 22 2C 22 | FyDL4LU******"," [LK-030A] < 6F 66 66 73 65 74 22 3A 30 2C 22 66 69 6C 65 53 | offset":0,"fileSize" [LK-030A] < 69 7A 65 22 3A 32 30 34 38 2C 22 63 6F 6E 66 6C | :2048,"conflictStrategy" [LK-030A] < 69 63 74 53 74 72 61 74 65 67 79 22 3A 22 6F 76 | :"overwrite"} [LK-030A] < 65 72 77 72 69 74 65 22 7D 2C 22 69 64 22 3A 22 | ,"id":"1" [LK-030A] < 31 22 2C 22 6D 65 73 73 61 67 65 22 3A 22 73 75 | ,"message": [LK-030A] < 63 63 65 73 73 22 7D | "success"} test_userdata:100 Open mqttuploadfile001.txt read at: 0 -
mqttuploadfile002.txt
[LK-030A] < 7B 22 63 6F 64 65 22 3A 32 30 30 2C 22 64 61 74 | {"code":200,"data" [LK-030A] < 61 22 3A 7B 22 66 69 6C 65 4E 61 6D 65 22 3A 22 | :{"fileName":" [LK-030A] < 6D 71 74 74 75 70 6C 6F 61 64 66 69 6C 65 30 30 | mqttuploadfile002.txt" [LK-030A] < 32 2E 74 78 74 22 2C 22 75 70 6C 6F 61 64 49 64 | ,"uploadId [LK-030A] < 22 3A 22 6B 6F 48 54 45 4B 46 34 59 58 31 6E 61 | ":"koHTEKF4YX1na [LK-030A] < 46 30 74 49 33 43 35 30 31 30 32 30 30 22 2C 22 | F0tI3C5******"," [LK-030A] < 6F 66 66 73 65 74 22 3A 30 2C 22 66 69 6C 65 53 | offset":0,"fileSize" [LK-030A] < 69 7A 65 22 3A 31 31 35 31 2C 22 63 6F 6E 66 6C | :1151, [LK-030A] < 69 63 74 53 74 72 61 74 65 67 79 22 3A 22 6F 76 | "conflictStrategy": [LK-030A] < 65 72 77 72 69 74 65 22 7D 2C 22 69 64 22 3A 22 | "overwrite"},"id":" [LK-030A] < 32 22 2C 22 6D 65 73 73 61 67 65 22 3A 22 73 75 | 2","message": [LK-030A] < 63 63 65 73 73 22 7D | "success"}
-
-
Journaux de lecture de fichiers :
Après que IoT Platform a répondu et déclenché le rappel, les journaux de lecture de fichiers sont les suivants :
-
mqttuploadfile001.txt
Open mqttuploadfile001.txt read at: 0 Read_len: 1024 [1637138923.215][LK-2014] Read data_len:1024[1637138923.215][LK-0309] pub: /sys/a18wP******/LightSwitch/thing/file/upload/mqtt/send [LK-030A] > 00 55 7B 22 69 64 22 3A 22 34 22 2C 22 70 61 72 | .U{"id":"4","params" [LK-030A] > 61 6D 73 22 3A 7B 22 75 70 6C 6F 61 64 49 64 22 | :{"uploadId" [LK-030A] > 3A 22 6B 54 48 76 63 47 45 31 78 58 56 48 33 46 | :"kTHvcGE1xXVH3F [LK-030A] > 79 44 4C 34 4C 55 30 31 30 32 30 30 22 2C 22 6F | yDL4LU******", [LK-030A] > 66 66 73 65 74 22 3A 30 2C 22 62 53 69 7A 65 22 | "offset":0,"bSize" [LK-030A] > 3A 31 30 32 34 7D 7D 55 4E 41 56 41 4F 4F 56 4C | :1024}}UNAVAOOVL [LK-030A] > 53 43 58 4C 57 59 43 54 5A 58 45 4C 47 43 4E 57 | SCXLWYCTZXELGCNW [LK-030A] > 58 55 55 41 46 54 47 46 46 42 4D 46 48 48 54 59 | XUUAFTGFFBMFHHTY [LK-030A] > 52 59 46 58 44 49 57 45 4A 4E 50 47 46 4A 49 45 | RYFXDIWEJNPGFJIE [LK-030A] > 4E 43 55 43 50 4B 54 57 54 50 4F 4F 49 45 4B 4C | NCUCPKTWTPOOIEKL [LK-030A] > 4F 5A 54 55 55 42 4C 4B 58 5A 48 59 4D 4A 49 43 | OZTUUBLKXZHYMJIC [LK-030A] > 46 41 4E 54 49 41 59 41 46 4E 4B 4D 52 4F 43 51 | FANTIAYAFNKMROCQ [LK-030A] > 48 4F 43 56 44 59 54 51 59 57 52 4D 48 4E 42 50 | HOCVDYTQY****** ...... ...... ...... -
mqttuploadfile002.txt
Open mqttuploadfile002.txt read at: 0 Read_len: 1024 [1637138923.216][LK-2014] Read data_len:1024[1637138923.216][LK-0309] pub: /sys/a18wP******/LightSwitch/thing/file/upload/mqtt/send [LK-030A] > 00 55 7B 22 69 64 22 3A 22 33 22 2C 22 70 61 72 | .U{"id":"3","params" [LK-030A] > 61 6D 73 22 3A 7B 22 75 70 6C 6F 61 64 49 64 22 | :{"uploadId" [LK-030A] > 3A 22 6B 6F 48 54 45 4B 46 34 59 58 31 6E 61 46 | :"koHTEKF4YX1naF [LK-030A] > 30 74 49 33 43 35 30 31 30 32 30 30 22 2C 22 6F | 0tI3C5******", [LK-030A] > 66 66 73 65 74 22 3A 30 2C 22 62 53 69 7A 65 22 | "offset":0,"bSize" [LK-030A] > 3A 31 30 32 34 7D 7D 55 4E 41 56 41 4F 4F 56 4C | :1024}}UNAVAOOVL [LK-030A] > 53 43 58 4C 57 59 43 54 5A 58 45 4C 47 43 4E 57 | SCXLWYCTZXELGCNW [LK-030A] > 58 55 55 41 46 54 47 46 46 42 4D 46 48 48 54 59 | XUUAFTGFFBMFHHTY [LK-030A] > 52 59 46 58 44 49 57 45 4A 4E 50 47 46 4A 49 45 | RYFXDIWEJNPGFJIE [LK-030A] > 4E 43 55 43 50 4B 54 57 54 50 4F 4F 49 45 4B 4C | NCUCPKTWTPOOIEKL [LK-030A] > 4F 5A 54 55 55 42 4C 4B 58 5A 48 59 4D 4A 49 43 | OZTUUBLKXZHYMJIC [LK-030A] > 46 41 4E 54 49 41 59 41 46 4E 4B 4D 52 4F 43 51 | FANTIAYAFNKMROCQ [LK-030A] > 48 4F 43 56 44 59 54 51 59 57 52 4D 48 4E 42 50 | HOCVDYTQYW****** ...... ...... ......
-
-
Journaux de surveillance de l'état du téléchargement :
Une fois le téléchargement terminé, IoT Platform renvoie des informations d'état :
-
mqttuploadfile001.txt
RemarqueCe fichier utilise la validation d'intégrité CRC64, donc le journal inclut la valeur CRC64 validée.
[1637138924.099][LK-0309] pub: /sys/a18wP******/LightSwitch/thing/file/upload/mqtt/send_reply [LK-030A] < 7B 22 63 6F 64 65 22 3A 32 30 30 2C 22 64 61 74 | {"code":200,"data" [LK-030A] < 61 22 3A 7B 22 66 69 63 56 61 6C 75 65 43 6C 69 | :{"ficValueCli [LK-030A] < 65 6E 74 22 3A 22 66 34 38 66 34 33 37 64 35 35 | ent":"f48f437d55 [LK-030A] < 64 34 37 31 34 63 22 2C 22 66 69 63 4D 6F 64 65 | ******","ficMode [LK-030A] < 22 3A 22 63 72 63 36 34 22 2C 22 75 70 6C 6F 61 | ":"crc64","uploadId" [LK-030A] < 64 49 64 22 3A 22 6B 54 48 76 63 47 45 31 78 58 | :"kTHvcGE1xX [LK-030A] < 56 48 33 46 79 44 4C 34 4C 55 30 31 30 32 30 30 | VH3FyDL4LU****** [LK-030A] < 22 2C 22 6F 66 66 73 65 74 22 3A 31 30 32 34 2C | ","offset":1024, [LK-030A] < 22 63 6F 6D 70 6C 65 74 65 22 3A 74 72 75 65 2C | "complete":true, [LK-030A] < 22 66 69 63 56 61 6C 75 65 53 65 72 76 65 72 22 | "ficValueServer" [LK-030A] < 3A 22 66 34 38 66 34 33 37 64 35 35 64 34 37 31 | :"f48f437d55**** [LK-030A] < 34 63 22 2C 22 62 53 69 7A 65 22 3A 31 30 32 34 | **","bSize":1024 [LK-030A] < 7D 2C 22 69 64 22 3A 22 36 22 2C 22 6D 65 73 73 | },"id":"6","message" [LK-030A] < 61 67 65 22 3A 22 73 75 63 63 65 73 73 22 7D | :"success"} [1637138924.099][LK-2014] Upload total size:2048 -
mqttuploadfile002.txt
[1637138923.884][LK-0309] pub: /sys/a18wP******/LightSwitch/thing/file/upload/mqtt/send_reply [LK-030A] < 7B 22 63 6F 64 65 22 3A 32 30 30 2C 22 64 61 74 | {"code":200,"data" [LK-030A] < 61 22 3A 7B 22 75 70 6C 6F 61 64 49 64 22 3A 22 | :{"uploadId":" [LK-030A] < 6B 6F 48 54 45 4B 46 34 59 58 31 6E 61 46 30 74 | koHTEKF4YX1naF0t [LK-030A] < 49 33 43 35 30 31 30 32 30 30 22 2C 22 6F 66 66 | I3C5******","offset" [LK-030A] < 73 65 74 22 3A 31 30 32 34 2C 22 63 6F 6D 70 6C | :1024,"complete" [LK-030A] < 65 74 65 22 3A 74 72 75 65 2C 22 62 53 69 7A 65 | :true,"bSize [LK-030A] < 22 3A 31 32 37 7D 2C 22 69 64 22 3A 22 35 22 2C | ":127},"id":"5", [LK-030A] < 22 6D 65 73 73 61 67 65 22 3A 22 73 75 63 63 65 | "message":"success" [LK-030A] < 73 73 22 7D | } [1637138923.884][LK-2014] Upload total size:1151
-
-
Journaux de sortie du programme :
Une fois le téléchargement terminé, le programme se désabonne des rubriques associées et se termine.
[1637648533.379][LK-2124] Complete upload total size:2048 MQTT Upload file(mqttuploadfile001.txt) success [1637648534.407][LK-2100] Finish upload,Deleted upload task. MQTT Upload file(mqttuploadfile002.txt) success [1637648534.407][LK-210F] aiot_mqtt_upload_deinit [1637648534.407][LK-0309] unsub: /sys/a18wP******/LightSwitch/thing/file/upload/mqtt/init_reply [1637648534.408][LK-0309] unsub: /sys/a18wP******/LightSwitch/thing/file/upload/mqtt/send_reply [1637648534.408][LK-0309] unsub: /sys/a18wP******/LightSwitch/thing/file/upload/mqtt/cancel_reply [1637648534.513][LK-1000] adapter_network_deinit
Journaux IoT Platform
Gérez les fichiers téléchargés et consultez les journaux d'exécution dans la console IoT Platform.
-
Pour afficher les fichiers téléchargés, accédez à Device Management > Devices. Cliquez sur View pour l'appareil cible, puis sélectionnez l'onglet File Management.
La liste des fichiers affiche le nom du fichier, la taille, l'heure de téléchargement et les opérations. Vous pouvez Download ou Delete les fichiers téléchargés.
-
Dans le volet de navigation de gauche, accédez à . Sélectionnez le produit concerné pour consulter les journaux de téléchargement de fichiers de l'appareil.
Dans l'onglet Cloud-side Runtime Log, la liste des journaux affiche Time, TraceID, Message Content, DeviceName, Business Type, Operation, Content et Status. Pour les téléchargements de fichiers depuis l'appareil, le type d'activité est Device File Upload et l'opération est FileUploadFinished. Le statut 200 indique un succès.
Étapes suivantes
Après avoir configuré le fichier d'exemple, compilez-le pour créer le fichier exécutable ./output/mqtt-upload-basic-demo. Compiler et exécuter la démonstration.
Pour résoudre les messages d'erreur dans les journaux d'exécution, consultez les descriptions des codes d'état dans aiot_mqtt_upload_api.h.