Просмотр исходного кода

update: httpplus,支持自定义上传buff,并按模组型号分配较大的buff,实现更高的上传速度

Wendal Chen 5 месяцев назад
Родитель
Сommit
0077ef9a9d
1 измененных файлов с 31 добавлено и 3 удалено
  1. 31 3
      script/libs/httpplus.lua

+ 31 - 3
script/libs/httpplus.lua

@@ -19,7 +19,19 @@
 --   2. 不支持fota
 
 -- 支持  http 1.0 和 http 1.1, 不支持http2.0
--- 支持 GET/POST/PUT/DELETE/HEAD 等常用方法
+-- 支持 GET/POST/PUT/DELETE/HEAD 等常用方法,也支持自定义method
+-- 支持 HTTP 和 HTTPS 协议
+-- 支持 IPv4 和 IPv6
+-- 支持 HTTP 鉴权
+-- 支持 multipart/form-data 上传文件和表单
+-- 支持 application/x-www-form-urlencoded 上传表单
+-- 支持 application/json 上传json数据
+-- 支持 自定义 body 上传任意数据
+-- 支持 自定义 headers
+-- 支持 大文件上传,不限大小
+-- 支持 zbuff 作为 body 上传和响应返回
+-- 支持 bodyfile 直接把文件内容作为body上传
+-- 支持 上传时使用自定义缓冲区, 2025.9.25 新增
 ]]
 
 
@@ -461,7 +473,22 @@ local function http_exec(opts)
     -- 然后是body
     local rbody = ""
     local write_counter = 0
-    local fbuf = zbuff.create(1024 * 24, 0, zbuff.HEAP_PSRAM) -- 根据psram状态来选
+    local fbuf = nil
+    if opts.upload_buff then
+        fbuf = opts.upload_buff
+    else
+        if rtos.bsp():startsWith("Air8000") or rtos.bsp():startsWith("Air780EHM") then
+            fbuf = zbuff.create(1024 * 128, 0, zbuff.HEAP_PSRAM) -- 718hm可以128k的,放手去用
+        else
+            fbuf = zbuff.create(1024 * 24, 0, zbuff.HEAP_PSRAM) -- 其他模组就是小的用吧
+        end
+    end
+    if fbuf == nil then
+        fbuf = zbuff.create(1024 * 8, 0, zbuff.HEAP_PSRAM) -- 创建一个小的,作为防御
+        if fbuf == nil then
+            fbuf = zbuff.create(1500, 0, zbuff.HEAP_PSRAM) -- 创建一个最小的,最后防御
+        end
+    end
     if opts.mp and #opts.mp > 0 then
         opts.log(TAG, "执行mulitpart上传模式")
         for k, v in pairs(opts.mp) do
@@ -577,7 +604,8 @@ local opts = {
     try_ipv6 = false, -- 可选,是否优先尝试ipv6地址,默认是false
     adapter = nil,    -- 可选,网络适配器编号, 默认是自动选
     timeout = 30,     -- 可选,读取服务器响应的超时时间,单位秒,默认30
-    bodyfile = "xxx"  -- 可选,直接把文件内容作为body上传, 优先级高于body参数
+    bodyfile = "xxx", -- 可选,直接把文件内容作为body上传, 优先级高于body参数
+    upload_buff = zbuff.create(1024*64) -- 可选,上传时使用的缓冲区,默认会根据型号创建一个buff
 }
 
 local code, resp = httpplus.request({url="https://httpbin.air32.cn/get"})