lua-resty-post

Openresty 解析 HTTP POST 数据的工具

$ opm get antonheryanto/lua-resty-post

lua-resty-post

Openresty HTTP post 工具

状态

该库已进行 Beta 测试并在生产环境中使用。

描述

该库使用 lua-resty-upload 处理 HTTP,该库速度非常快且内存占用低,它处理多种类型的 HTTP POST 并将其转换为 Lua 表格。

安装

  • 下载或克隆此仓库

  • 复制或链接到 openresty/lualib/resty/ 或任何你的 lua_package_path

如何使用

    local resty_post = require 'resty.post'
    local post = resty_post:new()
    local m = post:read()
    -- return table with all form value and file

文件上传

  • 支持多个文件上传

  • 文件信息使用字段名称作为键存储在 files 属性中

         { 
          files = {
           file1 = { -- input name
            name = "a.txt",
            type = "text/plain",
            size = 10240,
            tmp_name = 1454551131.5459
           },
           file2 = {
            name = "b.png",
            type = "image/png",
            size = 20480,
            tmp_name = 1454553275.6401
           }
         }
  • 定义文件上传路径,或默认为日志目录(遵循 ngx.config.prefix)

  • 默认文件将保存为临时名称(需要移动操作到目标位置)

        local resty_post = require "resty.post"
        local post = resty_post:new({
         path = "/my/path",           -- path upload file will be saved
         chunk_size = 10240,          -- default 8192
         no_tmp = true,               -- if set original name will uses or generate random name
         name = function(name, field) -- overide name with user defined function
          return name.."_"..field 
         end
        })
        post:read()

数组输入

支持多个相同名称的输入

这对于 HTML 输入复选框或多模式选择等很有用

    <input type="checkbox" name="check_multi" value="1">
    <input type="checkbox" name="check_multi" value="2">
    <select name="select_multi" multiple>
     <option value="">Please select</option>
     <option value="1">One</option>
     <option value="2">Two</option>
    </select>

转换为

    {
     check_multi = { 1, 2 },
     select_multi = { 1, 2 } 
    }

当选中一个类似于 ngx.req.get_post_args

    {
     check_multi = 2,
     select_multi = 1
    }

支持带名称的数组输入

这就像支持模仿类和属性的输入,可用于处理 PHP 风格(动态语言)和 ASP.NET MVC 绑定风格(使用类的静态语言)的动态输入支持。

    <div class="name-index">
     <input name="name[1]" value="Foo">
     <input name="name[0]" value="Bar">
    </div>
    <div class="user-single">
     <input name="user.title" value="Mr.">
     <input name="user[name]" value="Foo Bar">
    </div>
    <div class="user-static">
     <input name="users[0].title" value="Mr.">
     <input name="users[0].name" value="John Do">
    </div>
    <div class="user-dynamic">
     <input name="users[0][title]" value="Ms.">
     <input name="users[0][name]" value="Jane Do">
    </div>

转换为

    {
     name = {
      "Bar",
      "Foo"
     },
     user = {
      title = "Mr.",
      name = "Foo Bar"
     },
     users = {
      {
       title = "Mr.",
       name = "John Do"
      },
      {
       title = "Ms.",
       name = "Jane Do"
      }
     }
    }

版权和许可证

此模块根据 BSD 许可证许可。

版权所有 (C) 2015,作者 Anton Heryanto Hasan。

保留所有权利。

在满足以下条件的情况下,允许以源代码和二进制形式重新分发和使用,无论是否修改。

  • 源代码的重新分发必须保留上述版权声明、此条件列表和以下免责声明。

  • 二进制形式的重新分发必须在随分发提供的文档和/或其他材料中复制上述版权声明、此条件列表和以下免责声明。

本软件由版权持有人和贡献者“按原样”提供,并且不提供任何明示或暗示的担保,包括但不限于适销性和特定用途适用性的暗示担保。在任何情况下,版权持有人或贡献者均不对任何直接的、间接的、偶然的、特殊的、惩戒性的或后果性的损害(包括但不限于替代商品或服务的采购;使用、数据或利润损失;或业务中断)负责,无论这些损害是基于合同、严格责任或侵权(包括疏忽或其他原因)引起的,即使已被告知可能发生此类损害。

另请参阅

作者

Anton Heryanto

许可证

2bsd

版本