系列文章目录
文章目录
- 系列文章目录
- 前言
- 一、基本HTTP下载流程
-
- [1.1 设置下载URL](#1.1 设置下载URL)
- [1.2 启动HTTP下载](#1.2 启动HTTP下载)
- [1.3 下载进度监控](#1.3 下载进度监控)
- [1.4 读取文件内容](#1.4 读取文件内容)
- 二、分段下载:突破大文件限制
-
- [2.1 设置HTTP头(Range)](#2.1 设置HTTP头(Range))
- [2.2 启动分段下载](#2.2 启动分段下载)
- 三、下载存储到文件系统
-
- [3.1. 启动分段下载并保存到文件](#3.1. 启动分段下载并保存到文件)
- [3.2. 验证文件是否保存成功](#3.2. 验证文件是否保存成功)
- [3.3.如果需要验证文件内容,使用 **AT+FSREAD** 读取部分数据:](#3.3.如果需要验证文件内容,使用 AT+FSREAD 读取部分数据:)
- 四、大数据分段下载到文件系统
- 五、关键注意事项
前言
在物联网(IoT)应用中,远程固件升级和 大文件下载 是常见需求。域格(Yuge)模组支持HTTP下载功能,可以成为许多开发者的首选。本文将详细解析如何使用域格模组通过HTTP协议下载文件到文件系统,并实现分段下载,确保大文件传输的稳定性和可靠性。
一、基本HTTP下载流程
1.1 设置下载URL
首先,使用 AT+HTTPPARA 指令设置目标文件的URL:
c
AT+HTTPPARA="URL","http://hex.file.yuge.com/BV2.bin"
OK
说明:指定要下载的文件地址(BV2.bin)。
1.2 启动HTTP下载
通过 AT+HTTPACTION=0 启动下载:
c
AT+HTTPACTION=0
OK
说明:0 表示GET请求,模组开始从URL下载文件。
1.3 下载进度监控
模组会返回多个 +HTTPACTION 事件,显示下载状态:
c
+HTTPACTION: 0,200,1263
+HTTPACTION: 0,200,2048
...
+HTTPACTION: 0,200,969
+HTTPACTION: 0,200,0
字段解析:
0 :GET请求。
200 :HTTP状态码(成功)。
1263/2048/...:单次下载的数据长度(字节)最后返回0:下载结束。
1.4 读取文件内容
使用 AT+HTTPREAD 读取下载的数据。
偏移量依次读取
AT+HTTPREAD=<start_address>,<byte_size>
<start_address>:从这个偏移量的位置开始读取。
<byte_size>:读取数量的大小
AT+HTTPREAD=1024,4
+HTTPREAD:4
1234
OK
从1024字节开始读4个字节,字节为1234。
直接通过URC上报数据(直吐模式)
c
AT+HTTPGET=1
□
AT+HTTPGET=1
OK
[19:01:04.171]收←◆
+HTTPGET: 1,200,1273
1234123412341234,,,,,,,,,,
参数说明:
参数一:GET响应方式
1:直接通过URC上报数据
二、分段下载:突破大文件限制
对于大文件(如超过模组内存限制的文件),直接下载可能导致失败。此时,分段下载(Range Request) 是解决方案。
2.1 设置HTTP头(Range)
通过 AT+HTTPPARA="USERDATA" 指定下载范围:
c
AT+HTTPPARA="USERDATA","Range: bytes=0-1023"
OK
说明:请求服务器返回文件的 前1024字节(0-1023)。
2.2 启动分段下载
c
AT+HTTPACTION=0
OK
返回结果:
c
+HTTPACTION: 0,206,1024
+HTTPACTION: 0,206,0
206 :HTTP状态码(Partial Content,部分内容)。
1024:实际下载的字节数。
三、下载存储到文件系统
将HTTP分段下载的数据保存到文件系统(如 111.x),并验证文件完整性。
3.1. 启动分段下载并保存到文件
c
AT+HTTPGET=2,"111.yuge" // 模式2:数据写入文件系统,文件名"111.x"
OK
参数说明:
参数1:GET响应方式
0:存在内存中,再次发起请求或者AT+HTTPTERM 释放内存
1:直接通过URC上报数据
2 :存在文件系统中,再次发起同文件名的请求或者主动删除释放
参数2:
"111.yuge":目标文件名(需确保文件名唯一,避免覆盖)。
3.2. 验证文件是否保存成功
c
AT+FSATTRI="111.yuge" // 查询文件属性
+FSATTRI: 1024,1970/01/01 00:00:00 4 // 返回文件大小、创建时间、属性
OK
返回字段解析:
1024 :文件大小(字节),需与下载的分段大小一致。
1970/01/01 00:00:0 0:文件创建时间(默认值,可能因模组实现而异)。
4 :文件属性(具体含义参考模组文档,通常为普通文件标识)。
3. 读取文件内容(可选验证)
3.3.如果需要验证文件内容,使用 AT+FSREAD 读取部分数据:
c
AT+FSREAD="111.yuge",1,5,5 // 从偏移量5开始读取5字节
+FSREAD: 5 // 实际读取的字节数
ll_FB // 读取到的数据(示例值)
OK
参数说明:
"111.yuge" :目标文件名。
1 :启用偏移量参数(0表示忽略偏移量)。
5 :读取长度(字节)。
5:读取起始偏移量。
四、大数据分段下载到文件系统
若需下载整个文件,可通过循环请求不同字节范围实现:
获取文件总大小(可选):
通过HTTP HEAD请求获取文件头信息(如 Content-Length)。
c
AT+HTTPACTION=2 // HEAD请求
+HTTPACTION: 2,200,717 // 返回文件头长度
分段下载逻辑:
计算文件总大小(如从HTTP头获取)。
按固定大小(如1024字节)分块下载:
c
AT+HTTPPARA="USERDATA","Range: bytes=0-1023" // 第1块
AT+HTTPGET=2,"yuge_part1.bin"
c
AT+HTTPPARA="USERDATA","Range: bytes=1024-2047" // 第2块
AT+HTTPGET=2,"yuge_part2.bin"
合并分块文件(可以在MCU端实现)。
五、关键注意事项
HTTP状态码:
200:完整文件下载成功。
206:分段下载成功。
404:文件不存在(检查URL)。
文件系统空间 :
确保模组文件系统有足够空间存储下载的文件。
超时处理 :
网络不稳定时,需实现重试机制(如超时后重新发起请求)。
断点续传 :
结合 Range 头和本地记录,可实现断点续传功能。