跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • Wrk POST 请求中, 图片转 base64 的工具函数无法调用是怎么回事?
未分類
15 11 月 2020

Wrk POST 请求中, 图片转 base64 的工具函数无法调用是怎么回事?

Wrk POST 请求中, 图片转 base64 的工具函数无法调用是怎么回事?

資深大佬 : css3 2

wrk发起post请求,request body中有一个value要求传入图片的base64编码,网上找了一个图片转base64的lua 脚本,导入后,能够把图片转成base64,但wrk无法调用?把函数当成字符串了, 因为body传入的时候,本身就是字符串格式,怀疑把函数直接放进去当成字符串了,尝试把body`进行字符串加变量拼接,也没用,非常的尴尬啊,老哥们帮忙看看

-- post.lua  require("ZZBase64")  local files  local img = "test.jpg" local file = io.open(img,"rb")  files = file:read("*a") file:close()  -- print(ZZBase64.encode(files)) 能够打印出正常编码后的值  wrk.method = "POST" wrk.headers["Content-Type"] = "application/json" wrk.body = '{     "data": [     {         "image":         {             "base64": ZZBase64.encode(files)         }     }] }'  response = function(status, headers, body)        print(status) end  -- 接口返回 400, 提示 request 不正确,并且把 request 打印了出来,ZZBase64.encode(files)原样在里边 

Ctrl V 的 image to base64 lua

-- ZZBase64.lua   ZZBase64 = {} local string = string  ZZBase64.__code = {     'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',     'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f',     'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v',     'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/', }; ZZBase64.__decode = {} for k,v in pairs(ZZBase64.__code) do     ZZBase64.__decode[string.byte(v,1)] = k - 1 end  function ZZBase64.encode(text)     local len = string.len(text)     local left = len % 3     len = len - left     local res = {}     local index  = 1     for i = 1, len, 3 do         local a = string.byte(text, i )         local b = string.byte(text, i + 1)         local c = string.byte(text, i + 2)         -- num = a<<16 + b<<8 + c         local num = a * 65536 + b * 256 + c         for j = 1, 4 do             --tmp = num >> ((4 -j) * 6)             local tmp = math.floor(num / (2 ^ ((4-j) * 6)))             --curPos = tmp&0x3f             local curPos = tmp % 64 + 1             res[index] = ZZBase64.__code[curPos]             index = index + 1         end     end          if left == 1 then         ZZBase64.__left1(res, index, text, len)     elseif left == 2 then         ZZBase64.__left2(res, index, text, len)     end     return table.concat(res) end  function ZZBase64.__left2(res, index, text, len)     local num1 = string.byte(text, len + 1)     num1 = num1 * 1024 --lshift 10     local num2 = string.byte(text, len + 2)     num2 = num2 * 4 --lshift 2     local num = num1 + num2          local tmp1 = math.floor(num / 4096) --rShift 12     local curPos = tmp1 % 64 + 1     res[index] = ZZBase64.__code[curPos]          local tmp2 = math.floor(num / 64)     curPos = tmp2 % 64 + 1     res[index + 1] = ZZBase64.__code[curPos]          curPos = num % 64 + 1     res[index + 2] = ZZBase64.__code[curPos]          res[index + 3] = "=" end  function ZZBase64.__left1(res, index,text, len)     local num = string.byte(text, len + 1)     num = num * 16          tmp = math.floor(num / 64)     local curPos = tmp % 64 + 1     res[index ] = ZZBase64.__code[curPos]          curPos = num % 64 + 1     res[index + 1] = ZZBase64.__code[curPos]          res[index + 2] = "="     res[index + 3] = "=" end  function ZZBase64.decode(text)     local len = string.len(text)     local left = 0     if string.sub(text, len - 1) == "==" then         left = 2         len = len - 4     elseif string.sub(text, len) == "=" then         left = 1         len = len - 4     end          local res = {}     local index = 1     local decode = ZZBase64.__decode     for i =1, len, 4 do         local a = decode[string.byte(text,i    )]         local b = decode[string.byte(text,i + 1)]         local c = decode[string.byte(text,i + 2)]         local d = decode[string.byte(text,i + 3)]                  --num = a<<18 + b<<12 + c<<6 + d         local num = a * 262144 + b * 4096 + c * 64 + d                  local e = string.char(num % 256)         num = math.floor(num / 256)         local f = string.char(num % 256)         num = math.floor(num / 256)         res[index ] = string.char(num % 256)         res[index + 1] = f         res[index + 2] = e         index = index + 3     end          if left == 1 then         ZZBase64.__decodeLeft1(res, index, text, len)     elseif left == 2 then         ZZBase64.__decodeLeft2(res, index, text, len)     end     return table.concat(res) end  function ZZBase64.__decodeLeft1(res, index, text, len)     local decode = ZZBase64.__decode     local a = decode[string.byte(text, len + 1)]     local b = decode[string.byte(text, len + 2)]     local c = decode[string.byte(text, len + 3)]     local num = a * 4096 + b * 64 + c          local num1 = math.floor(num / 1024) % 256     local num2 = math.floor(num / 4) % 256     res[index] = string.char(num1)     res[index + 1] = string.char(num2) end  function ZZBase64.__decodeLeft2(res, index, text, len)     local decode = ZZBase64.__decode     local a = decode[string.byte(text, len + 1)]     local b = decode[string.byte(text, len + 2)]     local num = a * 64 + b     num = math.floor(num / 16)     res[index] = string.char(num) end  

大佬有話說 (5)

  • 資深大佬 : xgfan

    wrk.body = ‘{“data”:[{“image”:{“base64”: “‘…ZZBase64.encode(files)…'”}}]}’

  • 主 資深大佬 : css3

    @xgfan 老哥,也不行呐,报错 attempt to call a string value

  • 主 資深大佬 : css3

    @xgfan
    https://stackoverflow.com/questions/1405583/concatenation-of-strings-in-lua
    用了 2 个点,可以了,感谢老哥

  • 資深大佬 : xgfan

    @css3 那可能是我记错了……

  • 主 資深大佬 : css3

    @xgfan

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具