Project

upyun

0.03
No release in over 3 years
Low commit activity in last 3 years
UPYUN Rest API and Form API SDK
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
 Dependencies

Development

~> 2.6

Runtime

>= 1.6.7
 Project Readme

UPYUN sdk for Ruby

RubyGems Build status Coverage Status

UPYUN 官方 Rest API 以及 Form API SDK !

注: 0.x.x 版本为之前第三方开发者 veggie89 开发,后续将不会维护,如果您有使用 0.x.x 版本,请尽快切换至 1.x.x 版本,以获得最新的官方 SDK 支持

安装

Gemfile 中加入以下代码

gem 'upyun', '~> 1.0.8'

然后执行如下命令安装:

$ bundle

或者可以使用 gem 手动安装:

$ gem install upyun

基本使用

在使用本 SDK 之前,您需要拥有一个有效的 UPYUN 空间,并做好操作员的授权。详情可见 开发者指南

Rest API 使用

初始化一个实例

require 'upyun'

upyun = Upyun::Rest.new(bucket, operator, password, options, endpoint)

参数

参数名 类型 可选 说明
bucket String 必选 UPYUN 空间名称
operator String 必选 授权操作员帐号
password String 必选 授权操作员密码
options Hash 可选 连接选项,可用的选项见RestClient::Resource, 默认设置超时时间 60s
endpoint String 可选 (默认:Upyun::ED_AUTO): API接入点,可根据具体网络情况设置最优的接入点,详情见 API 域名

其中 endpoint 可选值如下:

Upyun::ED_AUTO     # 自动判断最优线路
Upyun::ED_TELECOM  # 电信接入点
Upyun::ED_UNION    # 联通(网通)接入点
Upyun::ED_CMCC     # 移动(铁通)接入点

在初始化实例后,也可以重新切换 API 接入点,方法如下:

upyun.endpoint = Upyun::ED_CMCC

上传文件

默认方式

默认使用 Upyun 基本 Header 头上传文件:

注: 这种方式只指定了又拍云必选的 Date, Content-Length 两个 Header,其它 Header 信息均未指定

upyun.put('/save/to/path', File.new('file.txt', 'rb'))  # 上传一个文件
upyun.put('/save/to/path', 'binary')                    # 直接上传内容

参数

  • /save/to/path: 文件在 UPYUN 空间的保存路径
  • file or binary:已打开的文件描述符或文件内容,如果为文件描述符,在上传结束后该描述符会自动关闭
自定义方式

您也可以选择使用 API 允许的额外可选 HTTP Header 参数,以使用 API 提供的预处理等功能:

headers = {'Content-Type' => 'image/jpeg', 'x-gmkerl-type' => 'fix_width', 'x-gmkerl-value' => 1080}
upyun.put('/save/to/path', 'file or binary', headers)

其中, /save/to/pathfile or binary 和默认上传方式中一致,headers 参数即为额外的可选 HTTP Header 参数, 详情查阅 Rest API

返回

上传成功:

  • 如果是图片空间,返回图片原信息,如 {:height=>629, :file_type=>"JPEG", :width=>440, :frames=>1}
  • 如果是其它空间,返回 true

失败返回一个 Hash 结构: {request_id: request_id, error: {code: code, message: message}}, 其中:

  • request_id 为本次请求的请求码,由 UPYUN 后台返回,可用该值查询 UPYUN 日志;
  • code 为又拍云返回的错误码;
  • message 为错误信息;

下载文件

获取文件内容
file = upyun.get('/path/to/file')

参数

  • '/path/to/file': 文件在 UPYUN 空间中的路径

返回 下载成功返回文件信息,失败返回一个 Hash: {request_id: request_id, error: {code: code, message: message}}, 其中:

  • request_id 为本次请求的请求码,由 UPYUN 本台返回,可用该值查询 UPYUN 日志;
  • code 为又拍云返回的错误码;
  • message 为错误信息;
保存文件至本地
upyun.get('/path/to/file', 'saved/foo.png', headers)

参数

  • '/path/to/file': 文件在 UPYUN 空间中的路径
  • saved/foo.png: 文件本地保存路径
  • headers: 指定下载时的头信息,默认为 {}

返回 下载成功返回获取的文件长度, 失败返回内容和上例一致。

获取文件信息

upyun.getinfo('/path/to/file')

参数

  • '/path/to/file': 文件在 UPYUN 空间中的路径

返回

成功返回 Hash 结构:

{file_type: "file", file_size: 397190, file_date: 1415954066}

其中

  • :file_type 说明是文件("file")还是目录("folder")
  • :file_size 是文件的大小
  • :file_date 是文件最后的更改时间。

失败返回一个 Hash: {request_id: request_id, error: {code: code, message: message}}

删除文件或者目录

upyun.delete('/path/to/file')

参数

  • '/path/to/file': 文件在 UPYUN 空间中的路径

返回

成功返回: true,

失败返回一个 Hash: {request_id: request_id, error: {code: code, message: message}}

创建目录

upyun.mkdir('/path/to/dir')

参数

  • '/path/to/dir': 文件在 UPYUN 空间中的路径

返回

成功返回: true,

失败返回一个 Hash: {request_id: request_id, error: {code: code, message: message}}

获取目录文件列表

upyun.getlist('/path/to/dir')

参数

  • '/path/to/dir': 文件在 UPYUN 空间中的路径

返回 成功返回一个数组,每个数组成员为一个文件/目录:

[{:name=>"foo", :type=>:folder, :length=>0, :last_modified=>1416193624},
 {:name=>"bar.txt", :type=>:file, :length=>25, :last_modified=>1415261057}]

失败返回一个 Hash: {request_id: request_id, error: {code: code, message: message}}

获取空间使用情况

upyun.usage

返回

成功返回空间使用量(单位为 Byte): 12400,

失败返回一个 Hash: {request_id: request_id, error: {code: code, message: message}}

Form API 使用

初始化一个实例

require 'upyun'

upyun = Upyun::Form.new('form-api-secret', 'bucket', 'options')

参数

  • form-api-secret: 表单 API 密钥,可通过 UPYUN 用户控制面板获取
  • bucket: UPYUN 空间名称
  • options: 连接选项,可用的选项见RestClient::Resource, 默认设置超时时间 60s

与 Rest API 相似, 表单 API 也有个实例变量 endpoint 代表又拍云基本域名,默认设置为 Upyun::ED_AUTO ,也可以在初始化一个实例之后通过如下方式切换:

upyun.endpoint = Upyun::ED_CMCC

上传文件

简化版

为了简化使用,又拍云文档必选的参数中:

save-key 默认设置为: '/{year}/{mon}/{day}/{filename}{.suffix}'
expiration 默认设置为10分钟: Time.now.to_i + 600


使用简化版本,将不使用额外的策略参数:

upyun.upload('filepath.png')
upyun.upload(File.new('filepath.png'))

参数可以是文件路径或者已经打开的文件文件描述符

返回 上传结果返回一个 Hash 结构:

{
  :code=>200,
  :message=>"ok",
  :url=>"/2014/11/17/upyun.jpg",
  :time=>1416208715,
  :sign=>"f5165b35df431065ca54490a34028635"
}

其中

  • code: 返回的状态码,200 为成功,其它为失败
  • message: 错误信息,具体查阅 表单 API 状态代码表
  • url: 上传文件保存路径
  • time: 请求的时间戳
  • sign: 签名参数,详情见 sign与non-sign参数说明
  • 如果在请求中指定了 ext-param, 那么返回的结构中也会有 ext-param 字段,详情见 ext-param
自定义参数

可以在上传的时候指定一些策略参数:

opts = {
  'save-key' => '/foo/bar.jpg',
  'content-type' => 'image/jpeg',
  'image-width-range' => '0,1024',
  'return-url' => 'http://www.example.com'
}
upyun.upload('file', opts)

特别地,如果指定了 return-url, 那么返回的需要跳转的地址等信息也在这个 Hash 结构中, 详情查阅 通知规则

贡献

  1. Fork 本仓库 ( https://github.com/upyun/ruby-sdk/fork )
  2. 创建您的新特性分支 (git checkout -b my-new-feature)
  3. 提交你的更新 (git commit -am 'Add some feature')
  4. 同步你的代码到 GitHub 远程仓库 (git push origin my-new-feature)
  5. 发起 Pull Request 给我们