// 1. 配置 PDP
AT+QICSGP=1,1,“”,“”,“”,1
AT+QIACT=1
AT+QIACT?
// 2. 配置 HTTP 使用的 PDP Context
AT+QHTTPCFG=“contextid”,1
// 如需自定义 Header,可开启 requestheader
AT+QHTTPCFG=“requestheader”,1
// 3. 设置 URL
AT+QHTTPURL=<url_len>,
CONNECT
http://xxx.xxx.com/upload
OK
// 4. 如果文件还不在模组文件系统中,先上传到模组
AT+QFUPL=“test.bin”,<file_size>,
CONNECT
<发送文件二进制数据>
+QFUPL: …
// 5. 使用 HTTP POST 上传文件
AT+QHTTPPOSTFILE=“test.bin”,
// 6. 查看返回结果
// 常见返回格式示例:
+QHTTPPOSTFILE: 0,200,<rsp_len>
// 7. 如需读取服务器响应
AT+QHTTPREAD=
这样方式为啥不对
该流程主要问题在 AT 命令格式和 Header 使用方式上:
-
不要使用中文引号
示例里的 “ ” 需要改成英文半角双引号 " ",否则模组会返回 ERROR。
-
命令末尾不要保留空逗号
例如以下写法不规范:
AT+QHTTPURL=<url_len>,
AT+QHTTPPOSTFILE="test.bin",
AT+QHTTPREAD=
应按实际语法补齐参数或去掉逗号。
-
requestheader=1 不能随意开启
开启:
AT+QHTTPCFG="requestheader",1
表示 HTTP 请求头需要由用户自己提供。
如果只是上传模组文件系统里的 test.bin 原始文件,建议先关闭:
AT+QHTTPCFG="requestheader",0
-
QHTTPPOSTFILE 不是 multipart 自动封装
该命令通常是把文件内容作为 HTTP POST body 上传。
如果服务器接口要求 multipart/form-data,不能只上传 test.bin 原始内容,需要按服务器要求构造完整 multipart 数据,包括 boundary、Content-Disposition、Content-Type 等内容。
可参考的简化流程如下:
AT+QICSGP=1,1,"","","",1
AT+QIACT=1
AT+QIACT?
AT+QHTTPCFG="contextid",1
AT+QHTTPCFG="requestheader",0
AT+QHTTPURL=25,80
CONNECT
http://xxx.xxx.com/upload
OK
AT+QFUPL="test.bin",<file_size>,60
CONNECT
<发送准确 file_size 字节文件数据>
AT+QHTTPPOSTFILE="test.bin",80
返回类似:
+QHTTPPOSTFILE: 0,200,<rsp_len>
再读取响应:
AT+QHTTPREAD=80
如果仍失败,重点确认三点:
- URL 长度
<url_len> 是否准确;
QFUPL 上传的文件大小是否和 <file_size> 完全一致;
- 服务器接口是否要求
multipart/form-data,如果要求,需要重新封装上传内容。
本回答仅供参考。若问题已解决,可标记为
解决方案 ;若仍有疑问,请等待官方技术人员回复,最终请以专业解答为准。