日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

示例三:MQTT文件上傳至用戶OSS空間

物聯網平臺提供的文件上傳功能,是將您上傳的文件存儲在物聯網平臺的OSS空間中,除此之外,還支持您通過MQTT方式將文件上傳至您自己的OSS空間中。

說明

文件上傳到您的OSS空間后,您只能在OSS空間對文件進行管理和操作,無法在物聯網平臺的設備詳情 > 文件管理頁面操作文件。

前提條件

  • 在物聯網平臺對設備授權OSS的操作權限。具體操作,請參見:上傳文件配置

  • 在文件上傳頁面獲取extra_params參數的配置信息。具體操作,請參見:文件上傳

    說明

    extra_params是將文件上傳至用戶OSS空間的關鍵參數。如果需要上傳文件到用戶的OSS空間,則配置extra_params。如果不需要將文件上傳至用戶的OSS空間,則extra_params配置為NULL。

操作步驟

  1. 初始化MQTT模塊。

  2. 初始化MQTT 文件上傳模塊,在mqtt_upload_user_oss_demo.c文件中設置需要上傳文件的信息。

    說明

    extra_params僅支持JSON格式,具體說明,請參見:文件上傳

    extra_params格式示例:

    {
        "ossOwnerType":"device-user",
        "serviceId":"1234567890",
        "fileTag":{
            "tagKey1":"tagValue1",
            "tagKey2":"tagValue2"
        }
    }

    upload組件參數配置代碼示例:

        uint32_t rsp_timeout = 10000;
        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 = 256;
        aiot_mqtt_upload_setopt(up_handle, AIOT_MQTT_UPLOADOPT_DEFAULT_BLOCK_SIZE, &block_size);
    
        
        /* 配置MQTT需要上傳的文件信息,未知文件大小,文件長度設置為-1,回調函數read_data_handler設置為NULL,
           使用aiot_mqtt_upload_send_data接口進行數據發送 */
        uint32_t file_size = -1;
        
        /* 如果需要上傳文件到用戶的OSS空間,則配置extra_params參數
           如果不需要將文件上傳到用戶的OSS空間,extra_params配置為NULL,
           可以在文件管理頁面查看具體文件。
           [extra_params參數配置必須使用JSON格式]
         */
        char *extra_params = "{\"ossOwnerType\":\"device-user\",\"serviceId\":\"1234567890\",\"fileTag\":{\"tagKey1\":\"tagValue1\",\"tagKey2\":\"tagValue2\"}}";
        
        aiot_mqtt_upload_file_opt_t file_option = {
            .file_name = MQTT_UPLOAD_SINGLE_FILE_NAME,
            .file_size = file_size,
            .mode = AIOT_MQTT_UPLOAD_FILE_MODE_OVERWRITE,
            .digest = NULL,
            .read_data_handler = NULL,
            .userdata = NULL,
            .extra_params = extra_params
        };
    
        res = aiot_mqtt_upload_setopt(up_handle, AIOT_MQTT_UPLOADOPT_FILE_OPTION, &file_option);
     
  3. 請求文件上傳。

    請求文件上傳的aiot_mqtt_upload_open_stream是同步接口,您需要等待應答信息后才能開始進行上傳。

    aiot_mqtt_upload_recv_t recv_packet = {0};
        res = aiot_mqtt_upload_open_stream(up_handle, MQTT_UPLOAD_SINGLE_FILE_NAME, &recv_packet);
        if (res < STATE_SUCCESS) {
            goto exit;
        }
  4. 上傳分片文件。

    您主動調用aiot_mqtt_upload_send_data接口,進行分片數據的上傳。

    說明

    is_commplete是通知物聯網平臺是否為文件上傳的最后一包數據,所以在上傳的過程中該參數需要設置為0,上傳最后一包數據時is_commplete需設置為1。

  5. if ((upload_file_len + data_len) < MQTT_UPLOAD_SINGLE_FILE_SIZE) {
        /* 發送分包數據 */
        data_len = block_size;
        is_commplete = 0;
    } else {
        /* 發送最后一包文件內容 */
        data_len = MQTT_UPLOAD_SINGLE_FILE_SIZE - upload_file_len;
        is_commplete = 1;
    }
    
    res = aiot_mqtt_upload_send_data(up_handle, MQTT_UPLOAD_SINGLE_FILE_NAME,            &g_upload_single_file_buf[upload_file_len], data_len, is_commplete);
    if (res == STATE_SUCCESS) {
        upload_file_len += data_len;
        printf("upload_file_len:%d\r\n", upload_file_len);
    } 
  6. 結束所有上傳文件后,銷毀會話句柄釋放資源。

    /* 等待所有文件上傳完成后,才可銷毀MQTT UPload 會話實例 */
    aiot_mqtt_upload_deinit(&up_handle);

日志說明

  1. MQTT連接成功。

    [1645604145.783][LK-0313] MQTT user calls aiot_mqtt_connect api, connect
    [1645604145.783][LK-032A] mqtt host: a1******Dih.iot-as-mqtt.cn-shanghai.aliyuncs.com
    [1645604145.783][LK-0317] user name: mqttupload0002&a1******Dih
    [1645604145.783][LK-0318] password: 194163B399BA079B9BB6*******************F2D275A9D9ADFBA29
    success to establish tcp, fd=5
    local port: 51712
    [1645604145.862][LK-1000] establish mbedtls connection with server(host='a1******Dih.iot-as-mqtt.cn-shanghai.aliyuncs.com', port=[443])
    [1645604145.889][LK-1000] success to establish mbedtls connection, (cost 45260 bytes in total, max used 47996 bytes)
    [1645604146.138][LK-0313] MQTT connect success in 355 ms
    AIOT_MQTTEVT_CONNECT
  2. MQTT 文件上傳創建會話并進行消息訂閱。

    [1645604146.138][LK-2113] aiot_mqtt_upload_init init
    [1645604146.138][LK-0309] sub: /sys/a1******Dih/mqttupload****/thing/file/upload/mqtt/init_reply
    [1645604146.138][LK-0309] sub: /sys/a1******Dih/mqttupload****/thing/file/upload/mqtt/send_reply
    [1645604146.138][LK-0309] sub: /sys/a1******Dih/mqttupload****/thing/file/upload/mqtt/cancel_reply
  3. 請求上傳文檔到用戶的OSS空間。

    [1645671153.383][LK-0309] pub: /sys/a1******Dih/mqttupload****/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","param
    [LK-030A] > 73 22 3A 7B 22 66 69 6C  65 4E 61 6D 65 22 3A 22 | s":{"fileName":"
    [LK-030A] > 6D 71 74 74 75 70 6C 6F  61 64 66 69 6C 65 2E 74 | mqttuploadfile.t
    [LK-030A] > 78 74 22 2C 22 66 69 6C  65 53 69 7A 65 22 3A 2D | xt","fileSize":-
    [LK-030A] > 31 2C 22 63 6F 6E 66 6C  69 63 74 53 74 72 61 74 | 1,"conflictStart
    [LK-030A] > 65 67 79 22 3A 22 6F 76  65 72 77 72 69 74 65 22 | egy":"overwrite"
    [LK-030A] > 2C 22 69 6E 69 74 55 69  64 22 3A 22 31 36 34 35 | ,"initUid":"1645
    [LK-030A] > 36 ** ** *1 35 33 33 38  33 39 22 2C 22 65 78 74 | 671*****39","ext
    [LK-030A] > 72 61 50 61 72 61 6D 73  22 3A 7B 22 6F 73 73 4F | raParams":{"ossO
    [LK-030A] > 77 6E 65 72 54 79 70 65  22 3A 22 64 65 76 69 63 | wnerType":"devic
    [LK-030A] > 65 2D 75 73 65 72 22 2C  22 73 65 72 76 69 63 65 | e-user","service
    [LK-030A] > 49 64 22 3A 22 31 32 33  34 35 36 37 38 39 30 22 | Id":"1234567890"
    [LK-030A] > 2C 22 66 69 6C 65 74  61 67 22 3A 7B 22 74 61 67 | ,"fileTag":{"tag
    [LK-030A] > 4B 65 79 31 22 3A 22  74 61 67 56 61 6C 75 65 31 | Key1":"tagValue1
    [LK-030A] > 22 2C 22 74 61 67 4B  65 79 32 22 3A 22 74 61 67 | ","tagKey2":"tag
    [LK-030A] > 56 61 6C 75 65 32 22  7D 7D 7D 7D                | Value2"}
  4. 收到物聯網平臺應答消息。

    [1645604146.391][LK-0309] pub: /sys/a1******Dih/mqttupload****/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,"dat
    [LK-030A] < 61 22 3A 7B 22 66 69 6C  65 4E 61 6D 65 22 3A 22 | a":{"fileName":"
    [LK-030A] < 6D 71 74 74 75 70 6C 6F  61 64 66 69 6C 65 2E 74 | mqttuploadfile.t
    [LK-030A] < 78 74 22 2C 22 75 70 6C  6F 61 64 49 64 22 3A 22 | xt","uploadId":"
    [LK-030A] < 66 66 35 4B 49 38 ** **  ** ** ** 62 63 51 69 52 | ff5KI8*****bcQiR
    [LK-030A] < 75 43 35 36 30 31 30 32  30 30 22 2C 22 6F 66 66 | uC56010200","off
    [LK-030A] < 73 65 74 22 3A 30 2C 22  66 69 6C 65 53 69 7A 65 | set":0,"fileSize
    [LK-030A] < 22 3A 2D 31 2C 22 63 6F  6E 66 6C 69 63 74 53 74 | ":-1,"conflictSt
    [LK-030A] < 72 61 74 65 67 79 22 3A  22 6F 76 65 72 77 72 69 | rategy":"overwri
    [LK-030A] < 74 65 22 7D 2C 22 69 64  22 3A 22 31 22 2C 22 6D | te"},"id":"1","m
    [LK-030A] < 65 73 73 61 67 65 22 3A  22 73 75 63 63 65 73 73 | essage":"success
    [LK-030A] < 22 7D                                            | "}
  5. 分送分片文件。

    循環調用aiot_mqtt_upload_send_data函數進行數據上傳,該函數是同步發送接口,等待應答STATE_SUCCESS后才能發起上傳新的一包數據。

    [1645604146.391][LK-210B] Recv file name:mqttuploadfile.txt
    [1645604146.401][LK-0309] pub: /sys/a1******Dih/mqttupload****/thing/file/upload/mqtt/send
    
    [LK-030A] > 00 67 7B 22 69 64 22 3A  22 32 22 2C 22 70 61 72 | .g{"id":"2","par
    [LK-030A] > 61 6D 73 22 3A 7B 22 75  70 6C 6F 61 64 49 64 22 | ams":{"uploadId"
    [LK-030A] > 3A 22 66 66 35 4B 49 **  ** ** ** ** ** ** 63 51 | :"ff5KI********Q
    [LK-030A] > 69 52 75 43 35 36 30 31  30 32 30 30 22 2C 22 6F | iRuC56010200","o
    [LK-030A] > 66 66 73 65 74 22 3A 30  2C 22 62 53 69 7A 65 22 | ffset":0,"bSize"
    [LK-030A] > 3A 32 35 36 2C 22 69 73  43 6F 6D 70 6C 65 74 65 | :256,"isComplete
    [LK-030A] > 22 3A 66 61 6C 73 65 7D  7D 00 00 00 00 00 00 00 | ":false}}.......
    [LK-030A] > 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 | ................
    [LK-030A] > 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 | ................
    [LK-030A] > 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 | ................
    [LK-030A] > 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 | ................
  6. 結束文件上傳。

    上傳最后一包數據時,您需要將isComplete設置為1,通知物聯網平臺這是最后一包上傳數據,完成文件上傳。

    [LK-030A] < 7B 22 63 6F 64 65 22 3A  32 30 30 2C 22 64 61 74 | {"code":200,"dat
    [LK-030A] < 61 22 3A 7B 22 66 69 63  4D 6F 64 65 22 3A 22 63 | a":{"ficMode":"c
    [LK-030A] < 72 63 36 34 22 2C 22 75  70 6C 6F 61 64 49 64 22 | rc64","uploadId"
    [LK-030A] < 3A 22 66 66 35 4B 49 **  ** ** ** ** ** ** ** 51 | :"ff5KI*******Q
    [LK-030A] < 69 52 75 43 35 36 30 31  30 32 30 30 22 2C 22 6F | iRuC56010200","o
    [LK-030A] < 66 66 73 65 74 22 3A 37  36 38 2C 22 63 6F 6D 70 | ffset":768,"comp
    [LK-030A] < 6C 65 74 65 22 3A 74 72  75 65 2C 22 66 69 63 56 | lete":true,"ficV
    [LK-030A] < 61 6C 75 65 53 65 72 76  65 72 22 3A 22 63 33 37 | alueServer":"c37
    [LK-030A] < 38 36 33 39 37 32 30 36  39 32 37 30 63 22 2C 22 | 863********270c","
    [LK-030A] < 62 53 69 7A 65 22 3A 32  35 36 7D 2C 22 69 64 22 | bSize":256},"id"
    [LK-030A] < 3A 22 35 22 2C 22 6D 65  73 73 61 67 65 22 3A 22 | :"5","message":"
    [LK-030A] < 73 75 63 63 65 73 73 22  7D                      | success"}
    
    [1645604147.904][LK-2125] Complete upload total size:1024
    upload_file_len:1024
    [1645604147.908][LK-2100] Finish upload,Deleted upload task.
    MQTT Upload file(mqttuploadfile.txt) uploadid(ff5KI*********RuC56010200) success.
  7. 上傳完成后銷毀句柄釋放資源。

    [1645604152.908][LK-210F] aiot_mqtt_upload_deinit
    [1645604152.908][LK-0309] unsub: /sys/a1******Dih/mqttupload****/thing/file/upload/mqtt/init_reply
    [1645604152.908][LK-0309] unsub: /sys/a1******Dih/mqttupload****/thing/file/upload/mqtt/send_reply
    [1645604152.908][LK-0309] unsub: /sys/a1******Dih/mqttupload****/thing/file/upload/mqtt/cancel_reply
    [1645604152.908][LK-1000] adapter_network_deinit