このトピックでは、Link SDK for C のデモファイル./demos/mqtt_upload_basic_demo.c を例として、Link SDK API を呼び出して MQTT 経由で IoT Platform にファイルをアップロードし、ハードウェアリソースの消費と開発コストを削減する方法について説明します。
背景情報
-
ファイルアップロード機能の概要については、「ファイルアップロードの概要」をご参照ください。
-
ファイルアップロード機能は MQTT 接続に基づいています。MQTT 接続のコード例については、「MQTT 経由で IoT Platform に接続する」をご参照ください。
ステップ 1:ファイルアップロードの初期化
-
ヘッダーファイルを追加します。
…… …… #include "aiot_mqtt_api.h" #include "aiot_mqtt_upload_api.h" #include "core_crc64.h" …… -
基盤となる依存関係とログ出力を設定します。
/* portfiles/aiot_port/ ディレクトリにあるシステム適応関数のコレクション */ extern aiot_sysdep_portfile_t g_aiot_sysdep_portfile; /* external/ali_ca_cert.c にあるサーバー証明書 */ extern const char *ali_ca_cert; /* SDK のログを出力するログコールバック */ static int32_t demo_state_logcb(int32_t code, char *message) { printf("%s", message); return 0; } -
aiot_mqtt_upload_init を呼び出して、ファイルアップロード クライアントインスタンスを作成し、そのデフォルトパラメーターを初期化します。
mqtt_handle = aiot_mqtt_upload_init();
ステップ 2:ファイルアップロードの設定
aiot_mqtt_upload_setopt を呼び出して、以下のオプションを設定します。
-
MQTT 接続ハンドルを関連付けます。
重要ファイルアップロード機能のパラメーターを設定する前に、デバイス認証情報と関連パラメーターが設定されていることを確認してください。「MQTT 接続パラメーターの設定」をご参照ください。
ファイルアップロードリクエストは MQTT 接続を使用します。このオプションで MQTT 接続ハンドルを関連付けます。
void *up_handle = aiot_mqtt_upload_init(); aiot_mqtt_upload_setopt(up_handle, AIOT_MQTT_UPLOADOPT_MQTT_HANDLE, mqtt_handle); -
(オプション)
ファイルアップロードパラメーターを設定します。
-
サンプルコード:
uint32_t rsp_timeout = 2000; aiot_mqtt_upload_setopt(up_handle, AIOT_MQTT_UPLOADOPT_RSP_TIMEOUT_MS, &rsp_timeout); uint32_t retry_count = 5; aiot_mqtt_upload_setopt(up_handle, AIOT_MQTT_UPLOADOPT_RETRY_COUNT, &retry_count); uint32_t block_size = 1024; aiot_mqtt_upload_setopt(up_handle, AIOT_MQTT_UPLOADOPT_DEFAULT_BLOCK_SIZE, &block_size); -
パラメーター:
パラメーター
説明
rsp_timeout
各データチャンクの再送信タイムアウト時間 (ミリ秒単位)。
デフォルト:5,000 ミリ秒 (5 秒)。0 に設定するとデフォルト値が使用されます。
サンプル値:2,000 ミリ秒。
AIOT_MQTT_UPLOADOPT_RSP_TIMEOUT_MS
ファイルアップロード中の各データチャンクの再送信タイムアウト時間を設定します。
retry_count
タイムアウト時のリトライ回数。
デフォルト:10。
サンプル値:5。
AIOT_MQTT_UPLOADOPT_RETRY_COUNT
ファイルアップロード中のタイムアウト時のリトライ回数を設定します。
block_size
各データチャンクの最大サイズ (バイト単位)。
範囲:256~131,072。デフォルト:2,048 バイト。
サンプル値:1,024 バイト。
AIOT_MQTT_UPLOADOPT_DEFAULT_BLOCK_SIZE
ファイルアップロード中に送信される各データチャンクの最大サイズを設定します。
-
(オプション) ステップ 3:CRC64 チェックサムの計算
デフォルトでは、プロトコルは、各データチャンクに対して CRC16 計算を実行します。オプションで、ファイル全体の検証に CRC64 を使用できます。SDK には CRC64 計算用の C ライブラリが含まれています。
以下のコードは、ファイルの CRC64 チェックサムを計算します。
uint64_t crc = mqtt_upload_get_file_crc64(MQTT_UPLOAD_FILE_NAME);
ステップ 4:ファイルアップロードのリクエスト
-
aiot_mqtt_upload_open_stream を呼び出して、IoT Platform にファイルアップロードリクエストを送信します。
重要-
ファイルをアップロードする際、同じファイルに対して aiot_mqtt_upload_open_stream を複数回呼び出さないでください。アップロードが失敗した場合は、リクエストを再送信して再開できます。
-
異なるファイルをアップロードする場合は、aiot_mqtt_upload_open_stream を複数回呼び出すことができます。SDK は複数のファイルの同時アップロードをサポートしています。
-
サンプルコード:
-
ファイルサイズとファイル名を定義します。
#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") -
ファイルをアップロードするリクエストを送信します。
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);
-
-
サンプルコードの説明:
-
サンプルコードでは、この API を呼び出して 2 つのファイル (
mqttuploadfile001.txtとmqttuploadfile002.txt) を同時にアップロードします。重要-
ファイル名には次の制限があります。
-
数字、英字、アンダースコア (_)、ピリオド (.) のみを含む。
-
数字または英字で始まる。
-
長さが 100 バイト以下である。
-
-
最大ファイルサイズは 16 MB です。
-
-
ファイル
mqttuploadfile001.txtは CRC64 検証を使用し、userdataパラメーターを渡します。 -
ファイル
mqttuploadfile002.txtは CRC64 検証を使用せず、userdataパラメーターも渡しません。 -
サンプルコードでは、[上書き]ポリシーを使用しています。次の表は、使用可能なポリシーを説明しています。
ポリシー
説明
overwrite
デフォルトポリシー。IoT Platform は同じ名前の既存ファイルを削除し、新しくアップロードされたファイルのみを保持します。
append
デバイスがファイルアップロードリクエストを送信すると、IoT Platform は同じ名前の既存ファイルに関する情報を返します。その後、デバイスは次のことができます。
-
既存ファイルが不完全にアップロードされた場合、デバイスはアップロードを再開できます。
説明IoT Platform は不完全なアップロードを 24 時間のみ保持します。
-
ファイルがすでに完全にアップロードされている場合、デバイスは上書きポリシーを使用するか、再アップロード前にローカルファイルの名前を変更する必要があります。
reject
IoT Platform はファイルが既に存在することを示すエラーコードを返し、アップロードリクエストを拒否します。
-
-
-
-
IoT Platform はファイルアップロードリクエストに応答し、デバイス上でコールバックをトリガーします。
コールバックでは、SDK がファイルコンテンツまたはメモリデータをチャンク単位で読み取り、各チャンクに対して CRC16 計算を実行します。
重要チャンク転送中、各データチャンクは
AIOT_MQTT_UPLOADOPT_DEFAULT_BLOCK_SIZE値を超えてはなりません。最後のチャンクを除き、各チャンクは少なくとも 256 バイトである必要があります。次のコールバック関数
mqtt_upload_read_data_handlerは、ファイルデータをチャンク単位で読み取ります。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; } -
(オプション)
進行中のアップロードをキャンセルするには、aiot_mqtt_upload_cancel_stream を呼び出します。
API リファレンス:aiot_mqtt_upload_cancel_stream。
ステップ 5:アップロードステータスの処理
ファイルアップロード中に、aiot_mqtt_upload_process をループで呼び出して、アップロードステータスを確認します。
while(1) {
aiot_mqtt_upload_result_t result = aiot_mqtt_upload_process(up_handle);
if (result.code == STATE_MQTT_UPLOAD_FINISHED) {
/* アップロード成功 */
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 ) {
/* アップロード失敗 */
printf("MQTT Upload file(%s) failed,res:-0x%.4X\r\n", result.file_name, -result.code);
/* MQTT UPLOAD インスタンスを破棄 */
} 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 crc64 failed,res:-0x%.4X\r\n", result.file_name, -result.code);
}
sleep(1);
}
ステップ 6:ファイルアップロードの解放
aiot_mqtt_upload_deinit を呼び出して、ファイルアップロード クライアントインスタンスを破棄し、リソースを解放します。
aiot_mqtt_upload_deinit(&up_handle);
デバイス側のログ
デバイス側でランタイム結果を確認します。
-
接続ログ:
デバイスが IoT Platform に正常に接続すると、次のログが生成されます。
[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 -
ファイルアップロードトピックのサブスクリプション:
[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 -
ファイルアップロードリクエストログ:
デバイスが 2 つのファイルのアップロードリクエストを送信します。
ファイル名
サイズ (バイト)
CRC64 検証
mqttuploadfile001.txt
2048
あり
mqttuploadfile002.txt
1151
なし
[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 | }} -
ファイルアップロード応答ログ:
2 つのファイルの応答ログ:
-
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"}
-
-
ファイル読み取りログ:
IoT Platform が応答してコールバックをトリガーした後、ファイル読み取りログは次のようになります。
-
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****** ...... ...... ......
-
-
アップロードステータス監視ログ:
アップロード完了後、IoT Platform はステータス情報を返します。
-
mqttuploadfile001.txt
説明このファイルは CRC64 整合性検証を使用するため、ログには検証された CRC64 値が含まれます。
[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
-
-
プログラム終了ログ:
アップロード完了後、プログラムは関連トピックのサブスクリプションを解除して終了します。
[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
IoT Platform のログ
IoT Platform コンソールで、アップロードされたファイルを管理し、ランタイムログを確認します。
-
アップロードされたファイルを表示するには、[デバイス管理] > [デバイス] に移動します。対象のデバイスの [表示] をクリックし、次に[ファイル管理] タブを選択します。
ファイルリストには、ファイル名、サイズ、アップロード時刻、および操作が表示されます。アップロードされたファイルを [ダウンロード] または [削除] できます。
「ファイルの管理」をご参照ください。
-
左側のナビゲーションペインで、 に移動します。関連製品を選択してデバイスファイルのアップロードログを表示します。
[クラウド側ランタイムログ] タブで、ログリストには [時刻]、[TraceID]、[メッセージコンテンツ]、[DeviceName]、[ビジネスタイプ]、[操作]、[コンテンツ]、および [ステータス] が表示されます。デバイスファイルアップロードの場合、ビジネスタイプは [Device File Upload] で、操作は [FileUploadFinished] です。ステータス 200 は成功を示します。
次のステップ
-
サンプルファイルを設定した後、コンパイルして実行可能ファイル./output/mqtt-upload-basic-demo を作成します。「デモのコンパイルと実行」をご参照ください。
-
ランタイムログのエラーメッセージをトラブルシューティングするには、aiot_mqtt_upload_api.h のステータスコードの説明を確認してください。