HTTP 模块实现HTTP文件上传

// 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 使用方式上:

  1. 不要使用中文引号
    示例里的 “ ” 需要改成英文半角双引号 " ",否则模组会返回 ERROR

  2. 命令末尾不要保留空逗号
    例如以下写法不规范:

    AT+QHTTPURL=<url_len>,
    AT+QHTTPPOSTFILE="test.bin",
    AT+QHTTPREAD=
    

    应按实际语法补齐参数或去掉逗号。

  3. requestheader=1 不能随意开启
    开启:

    AT+QHTTPCFG="requestheader",1
    

    表示 HTTP 请求头需要由用户自己提供。
    如果只是上传模组文件系统里的 test.bin 原始文件,建议先关闭:

    AT+QHTTPCFG="requestheader",0
    
  4. 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,如果要求,需要重新封装上传内容。

本回答仅供参考。若问题已解决,可标记为 :white_check_mark:解决方案 ;若仍有疑问,请等待官方技术人员回复,最终请以专业解答为准。

我是这样的流程,看看为啥不成功,我想直接文件上传