Home

Awesome

又拍云 lua SDK

又拍云存储lua SDK,基于 又拍云存储HTTP REST API接口nginxngx_lua 开发。

下载地址:

更新说明

目录

<a name="云存储基础接口"></a>

云存储基础接口

<a name="准备操作"></a>

准备操作

创建空间

大家可通过又拍云主站创建自己的个性化空间。具体教程请参见“创建空间”

初始化UpYun
    location /t {
        content_by_lua '
            local yun = require "resty.upyun"
            local config = {
                            user = "acayf", --授权操作员名称
                            passwd = "testupyun", --操作员密码
                            endpoint = 0, --接入点
                            author = "upyun" --认证方式
                            }
            local upyun = yun:new(config)

            ...
        ';
    }

在使用lua SDK中的任何操作之前,都必须先按上述方式创建一个upyun本地变量。

若不了解授权操作员,请参见“授权操作员”

选择最优的接入点

根据国内的网络情况,又拍云存储API目前提供了电信、联通网通、移动铁通三个接入点。

在upyun初始化前,可以通过endpoint配置项进行设置。若没有明确进行设置,upyun默认将根据网络条件自动选择接入点。

接入点有四个值可选:

**注:**建议大家根据服务器网络状况,手动设置合理的接入点已获取最佳的访问速度。

选择http请求认证方式

根据用户需求,又拍云存储API目前提供了HTTP基本认证,又拍云签名认证两种认证方式,用户可以自行选择一种,为确保安全性,建议使用又拍云签名认证方式。

在upyun初始化前,可以通过author配置项进行设置。若没有明确进行设置,upyun默认将采用又拍云签名认证方式。

认证方式有两个值可选:

<a name="上传文件"></a>

上传文件

    location /t {
        content_by_lua '
            local yun = require "resty.upyun"
            local config = {
                            user = "acayf", --授权操作员名称
                            passwd = "testupyun", --操作员密码
                            }
            local upyun = yun:new(config)

            local savePath = "/acayf-img/sample.jpg"
            local gmkerl = nil
            local options = {
                             mkdir = true, 
                             md5 = true, 
                             secret = "secret", 
                             otype = "JPEG"
                            }
            local info, err = upyun:upload_file(savePath, gmkerl, options)
            if not info then
                ngx.say("failed to upload image file : " .. err)
                return
            end
        ';
    }
参数说明
其他说明
        info["width"]      // 图片宽度
        info["height"]     // 图片高度
        info["frames"]     // 图片帧数
        info["file-type"]  // 图片类型
注意事项

<a name="下载文件"></a>

下载文件

    location /t {
        content_by_lua '
            local yun = require "resty.upyun"
            local config = {
                            user = "acayf", --授权操作员名称
                            passwd = "testupyun", --操作员密码
                            }
            local upyun = yun:new(config)

            local savePath = "/acayf-img/sample.jpg"
            local ok, err = upyun:download_file(savePath)
            if not ok then
                ngx.say("failed to downlod file : " .. err)
                return
            end
        ';
    }
参数说明
注意事项

<a name="获取文件信息"></a>

获取文件信息

    location /t {
        content_by_lua '
            local yun = require "resty.upyun"
            local config = {
                            user = "acayf", --授权操作员名称
                            passwd = "testupyun", --操作员密码
                            }
            local upyun = yun:new(config)

            local savePath = "/acayf-img/sample.jpg"
            local info, err = upyun:get_fileinfo(savePath)
            if not info then
                ngx.say("failed to get file info : " .. err)
                return
            end
        ';
    }
参数说明
其他说明
   * info["type"]; // 文件类型
   * info["size"]; // 文件大小
   * info["date"]; // 创建日期

<a name="删除文件"></a>

删除文件

    location /t {
        content_by_lua '
            local yun = require "resty.upyun"
            local config = {
                            user = "acayf", --授权操作员名称
                            passwd = "testupyun", --操作员密码
                            }
            local upyun = yun:new(config)

            local savePath = "/acayf-file/test.txt"
            local ok, err = upyun:remove_file(savePath)
            if not ok then
                ngx.say("failed to remove file : " .. err)
                return
            end

        ';
    }
参数说明
其他说明

<a name="创建目录"></a>

创建目录

    location /t {
        content_by_lua '
            local yun = require "resty.upyun"
            local config = {
                            user = "acayf", --授权操作员名称
                            passwd = "testupyun", --操作员密码
                            }
            local upyun = yun:new(config)

            local dir = "/acayf-file/dir/test/"
            local ok, err = upyun:make_dir(dir, {mkdir = true})
            if not ok then
                ngx.say("failed to make dir : " .. err)
                return
            end

        ';
    }
参数说明
其他说明

<a name="删除目录"></a>

删除目录

    location /t {
        content_by_lua '
            local yun = require "resty.upyun"
            local config = {
                            user = "acayf", --授权操作员名称
                            passwd = "testupyun", --操作员密码
                            }
            local upyun = yun:new(config)

            local dir = "/acayf-file/test/"
            local ok, err = upyun:remove_file(dir)
            if not ok then
                ngx.say("failed to remove dir : " .. err)
                return
            end

        ';
    }
参数说明
其他说明

<a name="获取目录文件列表"></a>

获取目录文件列表

    location /t {
        content_by_lua '
            local yun = require "resty.upyun"
            local config = {
                            user = "acayf", --授权操作员名称
                            passwd = "testupyun", --操作员密码
                           }
            local upyun = yun:new(config)

            local dir = "/acayf-file/test/"
            local info, err = upyun:read_dir(dir)
            if not info then
                ngx.say("failed to read dir : " .. err)
                return
            end
        ';
    }
参数说明
其他说明

<a name="获取使用量情况"></a>

获取使用量情况

    location /t {
        content_by_lua '
            local yun = require "resty.upyun"
            local config = {
                            user = "acayf", --授权操作员名称
                            passwd = "testupyun", --操作员密码
                           }
            local upyun = yun:new(config)

            local dir = "/acayf-file/test/"
            local info, err = upyun:get_usage(dir)
            if not info then
                ngx.say("failed to get usage : " .. err)
                return
            end
        ';
    }
参数说明
其他说明

<a name="图片处理接口"></a>

图片处理接口

对于图片的自定义处理,又拍云存储支持以下两种方式:

  1. 自定义版本方式
  2. 上传图片时传递图片处理参数

虽然两种方式都能够达到图片处理的效果,但存在以下区别:

区别点自定义版本方式参数处理方式
是否保留原图是,各个缩略图都在这个原图的基础上制作否,只保留处理后的图片,若再使用缩略图版本号的方式来访问(这种方法是可行的),则将在处理后的图片基础上制作
空间使用量以原图的大小计算使用量,后续各个版本的缩略图都不会计算在用户的空间使用量中以处理后的图片大小计算使用量,大小视具体的处理参数而定
灵活性可通过修改自定义版本的参数来满足变化的需求,参数修改后若没有自动刷新缓存,则可以手动强制刷新来确保新参数生效只能调整代码中的处理参数,且原先保存的图片无法自动更新

我们更推荐大家使用自定义版本的方式对图片进行处理,但您可以根据自己业务的使用场景来选用合适的方式。

以下内容只是介绍“传递图片处理参数”的方法。

<a name="缩略图"></a>

缩略图

    location /t {
        content_by_lua '
            local yun = require "resty.upyun"
            local config = {
                            user = "acayf", --授权操作员名称
                            passwd = "testupyun", --操作员密码
                            }
            local upyun = yun:new(config)

            local savePath = "/acayf-img/sample_fixwidth.jpg"
            local gmkerl = {
                            type = "fix_width",
                            value = 200,
                            quality = 95,
                            unsharp = true
                           }
            local options = {mkdir = true}
            local info, err = upyun:upload_file(savePath, gmkerl, options)
            if not info then
                ngx.say("failed to upload image file : " .. err)
                return
            end

            savePath = "/acayf-img/sample_thumbnail.jpg"
            gmkerl = {
                        thumbnail = "fixwidth"
                     }
            options = {mkdir = true}
            info, err = upyun:upload_file(savePath, gmkerl, options)
            if not info then
                ngx.say("failed to upload image file : " .. err)
                return
            end
        ';
    }
参数说明
其他说明

<a name="图片旋转"></a>

图片旋转

    location /t {
        content_by_lua '
            local yun = require "resty.upyun"
            local config = {
                            user = "acayf", --授权操作员名称
                            passwd = "testupyun", --操作员密码
                            }
            local upyun = yun:new(config)

            local savePath = "/acayf-img/sample_rotate.jpg"
            local gmkerl = {
                            rotate = 90
                           }
            local options = {mkdir = true}
            local info, err = upyun:upload_file(savePath, gmkerl, options)
            if not info then
                ngx.say("failed to upload image file : " .. err)
                return
            end
        ';
    }
参数说明
其他说明

<a name="图片裁剪"></a>

图片裁剪

    location /t {
        content_by_lua '
            local yun = require "resty.upyun"
            local config = {
                            user = "acayf", --授权操作员名称
                            passwd = "testupyun", --操作员密码
                            }
            local upyun = yun:new(config)

            local savePath = "/acayf-img/sample_crop.jpg"
            local gmkerl = {
                            crop = "0,0,200,160"
                           }
            local options = {mkdir = true}
            local info, err = upyun:upload_file(savePath, gmkerl, options)
            if not info then
                ngx.say("failed to upload image file : " .. err)
                return
            end
        ';
    }
参数说明
其他说明

<a name="错误代码表"></a>

错误代码表

HTTP状态码返回代码描述
400Bad Request错误请求(如 URL 缺少空间名)
401Unauthorized访问未授权
401Sign error签名错误(操作员和密码,或签名格式错误)
401Need Date Header发起的请求缺少 Date 头信息
401Date offset error发起请求的服务器时间错误,请检查服务器时间是否与世界时间一致
403Not Access权限错误(如非图片文件上传到图片空间)
403File size too max单个文件超出大小(100Mb 以内)
403Not a Picture File图片类空间错误码,非图片文件或图片文件格式错误。针对图片空间只允许上传 jpg/png/gif/bmp/tif 格式。
403Picture Size too max图片类空间错误码,图片尺寸太大。针对图片空间,图片总像素在 200000000 以内。
403Bucket full空间已用满
403Bucket blocked空间被禁用,请联系管理员
403User blocked操作员被禁用
403Image Rotate Invalid Parameters图片旋转参数错误
403Image Crop Invalid Parameters图片裁剪参数错误
404Not Found获取文件或目录不存在;上传文件或目录时上级目录不存在
406Not Acceptable(path)目录错误(创建目录时已存在同名文件;或上传文件时存在同名目录)
503System Error系统错误