diff --git a/Gemfile.lock b/Gemfile.lock index abe5a6d..a15524f 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,7 +1,7 @@ PATH remote: . specs: - qiniu-rs (2.4.0) + qiniu-rs (3.0.0) json (~> 1.7.3) mime-types (~> 1.19) rest-client (~> 1.6.7) diff --git a/docs/README.md b/docs/README.md index 949582d..9c49629 100644 --- a/docs/README.md +++ b/docs/README.md @@ -17,6 +17,7 @@ title: Ruby SDK 使用指南 | 七牛云存储 - [上传文件](#upload) - [获取用于上传文件的临时授权凭证](#generate-upload-token) - [服务端上传文件](#upload-server-side) + - [针对 NotFound 场景处理](#upload-file-for-not-found) - [客户端直传文件](#upload-client-side) - [查看文件属性信息](#stat) - [获取文件下载链接(含文件属性信息)](#get) @@ -29,9 +30,9 @@ title: Ruby SDK 使用指南 | 七牛云存储 - [批量删除文件](#batch_delete) - [创建公开外链](#publish) - [取消公开外链](#unpublish) - - [bucket 管理](#buckets) - - [创建 bucket](#mkbucket) - - [列出所有 bucket](#list-all-buckets) + - [Bucket(资源表)管理](#buckets) + - [创建 Bucket](#mkbucket) + - [列出所有 Bucket](#list-all-buckets) - [访问控制](#set-protected) - [图像处理](#op-image) - [查看图片属性信息](#image_info) @@ -40,6 +41,12 @@ title: Ruby SDK 使用指南 | 七牛云存储 - [高级图像处理(缩略、裁剪、旋转、转化)](#image_mogrify_preview_url) - [高级图像处理(缩略、裁剪、旋转、转化)并持久化](#image_mogrify_save_as) - [高级图像处理(水印)](#image-watermarking) + - [水印准备工作](#watermarking-pre-work) + - [设置原图保护](#watermarking-set-protected) + - [设置水印预览图URL分隔符](#watermarking-set-sep) + - [设置水印预览图规格别名](#watermarking-set-style) + - [设置水印模板](#watermarking-set-template) + - [获取水印模板](#watermarking-get-template) - [贡献代码](#Contributing) - [许可证](#License) @@ -116,20 +123,20 @@ title: Ruby SDK 使用指南 | 七牛云存储 **参数** -scope +:scope : 必须,字符串类型(String),设定文件要上传到的目标 `bucket` -expires_in +:expires_in : 可选,数字类型,用于设置上传 URL 的有效期,单位:秒,缺省为 3600 秒,即 1 小时后该上传链接不再有效(但该上传URL在其生成之后的59分59秒都是可用的)。 -callback_url +:callback_url : 可选,字符串类型(String),用于设置文件上传成功后,七牛云存储服务端要回调客户方的业务服务器地址。 -callback_body_type +:callback_body_type : 可选,字符串类型(String),用于设置文件上传成功后,七牛云存储服务端向客户方的业务服务器发送回调请求的 `Content-Type`。 -customer -: 可选,字符串类型(String), +:customer +: 可选,字符串类型(String),客户方终端用户(End User)的ID,该字段可以用来标示一个文件的属主,这在一些特殊场景下(比如给终端用户上传的图片打上名字水印)非常有用。 **返回值** @@ -139,50 +146,62 @@ customer #### 服务端上传文件 -通过 `Qiniu::RS.upload_with_token()` 方法可在客户方的业务服务器上直接往七牛云存储上传文件。该函数规格如下: +通过 `Qiniu::RS.upload_file()` 方法可在客户方的业务服务器上直接往七牛云存储上传文件。该函数规格如下: - Qiniu::RS.upload_with_token :uptoken => upload_token, - :file => file_path, - :bucket => bucket_name, - :key => record_id, - :mime_type => file_mime_type, - :note => some_notes, - :callback_params => callback_params, - :enable_crc32_check => false + Qiniu::RS.upload_file :uptoken => upload_token, + :file => file_path, + :bucket => bucket_name, + :key => record_id, + :mime_type => file_mime_type, + :note => some_notes, + :callback_params => callback_params, + :enable_crc32_check => false **参数** -uptoken +:uptoken : 必须,字符串类型(String),调用 `Qiniu::RS.generate_upload_token` 生成的 [用于上传文件的临时授权凭证](#generate-upload-token) -file +:file : 必须,字符串类型(String),本地文件可被读取的有效路径 -bucket +:bucket : 必须,字符串类型(String),类似传统数据库里边的表名称,我们暂且将其叫做“资源表”,指定将该数据属性信息存储到具体的资源表中 。 -key +:key : 必须,字符串类型(String),类似传统数据库里边某个表的主键ID,给每一个文件一个UUID用于进行标示。 -mime_type +:mime_type : 可选,字符串类型(String),文件的 mime-type 值。如若不传入,SDK 会自行计算得出,若计算失败缺省使用 application/octet-stream 代替之。 -note +:note : 可选,字符串类型(String),为文件添加备注信息。 -callback_params +:callback_params : 可选,String 或者 Hash 类型,文件上传成功后,七牛云存储向客户方业务服务器发送的回调参数。 -enable_crc32_check +:enable_crc32_check : 可选,Boolean 类型,是否启用文件上传 crc32 校验,缺省为 false 。 **返回值** -上传成功,返回 `true`,否则返回 `false` 。 +上传成功,返回如下一个 Hash,否则返回 `false`: -**针对 NotFound 处理** + {"hash"=>"FgHk-_iqpnZji6PsNr4ghsK5qEwR"} -您可以上传一个应对 HTTP 404 出错处理的文件,当您 [创建公开外链](#publish) 后,若公开的外链找不到该文件,即可使用您上传的“自定义404文件”代替之。要这么做,您只须使用 `Qiniu::RS.put_file` 函数上传一个 `key` 为固定字符串类型的值 `errno-404` 即可。 + + +##### 针对 NotFound 场景处理 + +您可以上传一个应对 HTTP 404 出错处理的文件,当您 [创建公开外链](#publish) 后,若公开的外链找不到该文件,即可使用您上传的“自定义404文件”代替之。要这么做,您只须使用 `Qiniu::RS.upload_file` 函数上传一个 `key` 为固定字符串类型的值 `errno-404` 即可。 + +除了使用 SDK 提供的方法,同样也可以借助七牛云存储提供的命令行辅助工具 [qboxrsctl](https://github.com/qiniu/devtools/tags) 达到同样的目的: + + qboxrsctl put + +将其中的 `` 换作 `errno-404` 即可。 + +注意,每个 `` 里边有且只有一个 `errno-404` 文件,上传多个,最后的那一个会覆盖前面所有的。 @@ -478,20 +497,61 @@ domain -### bucket 管理 +### Bucket(资源表)管理 -#### 创建 bucket +#### 创建 Bucket + + Qiniu::RS.mkbucket(bucket_name) + +可以通过 SDK 提供的 `Qiniu::RS.mkbucket` 函数创建一个 bucket(资源表)。 + +**参数** + +bucket_name +: 必须,字符串类型(String),资源表 bucket 的名称。 + +**返回值** + +如果指定 bucket 创建成功,返回 `true`,否则返回 `false` 。 -#### 列出所有 bucket +#### 列出所有 Bucket + + Qiniu::RS.buckets + +可以通过 SDK 提供的 `Qiniu::RS.buckets` 函数列出当前登录客户的所有 buckets(资源表)。 + +**返回值** + +如果请求成功,返回一个 buckets 的列表(Array),否则返回 `false` 。 + + ["Bucket1", "Bucket2", …, "BucketN"] #### 访问控制 - + + Qiniu::RS.set_protected(bucket_name, protected_mode) + +可以通过 SDK 提供的 `Qiniu::RS.set_protected` 函数来设置指定 bucket 的访问属性,一般在水印处理时作原图保护用。 + +**参数** + +bucket_name +: 必须,字符串类型(String),指定资源表 bucket 的名称。 + +protected_mode +: 必须,整型,值为 1 或者 0,值为 1 表示启用保护模式,反之亦然。 + +该函数不常用,一般在特殊场景下会用到。比如给图片打水印时,首先要设置原图保护,禁用公开的图像处理操作,采用水印的特殊图像处理,而保护原图就可以通过该函数操作实现。 + +**返回值** + +如果设置成功,返回 `true`,否则返回 `false` 。 + @@ -681,6 +741,219 @@ mogrify_options end + + +## 高级图像处理(水印) + + + +### 水印准备工作 + +为了保护用户原图和方便用户访问打过水印之后的图片,在经水印作用之前,需进行以下一些设置: + +1. [设置原图保护](#watermarking-set-protected) +2. [设置水印预览图URL分隔符](#watermarking-set-sep) +3. [设置水印预览图规格别名](#watermarking-set-style) + + + +#### 1. 设置原图保护 + +用户的图片打上水印后,其原图不可见。通过给原图所在的 Bucket(资源表)设置访问控制,可以达到保护原图的目的,详情请参考 [Bucket(资源表)管理之访问控制](set-protected)。 + +设置原图保护也可以借助七牛云存储提供的命令行辅助工具 [qboxrsctl](https://github.com/qiniu/devtools/tags) 来实现: + + // 为下面的所有图片设置原图保护 + qboxrsctl protected + + + +#### 2. 设置水印预览图URL分隔符 + +没有设置水印前,用户可以通过如下公开链接的形式访问原图([创建公开外链后的情况下](/v3/api/io/#rs-Publish)): + + http:/// + +设置水印后,其原图属性为私有,不能再通过这种形式访问。但是用户可以在原图的 `` 后面加上“分隔符”,以及相应的水印风格样式来访问打水印后的图片。例如,假设您为用户设定的访问水印图的分隔符为中划线 “-”,那么用户可以通过这种形式来访问打水印后的图片: + + http:///-/imageView//w//h//q//format//sharpen//watermark/ + +其中,`HasWatermark` 参数为 `0` (或者没有)表示不打水印,为 `1` 表示给图片打水印。 + +通过 SDK 提供的 `Qiniu::RS.set_separator` 函数可以设置水印预览图URL分隔符: + + Qiniu::RS.set_separator(bucket_name, separator) + +**参数** + +bucket_name +: 必须,字符串类型(String),图片所在的 Bucket(资源表) 名称 + +separator +: 必须,字符串类型(String),源图片与预览图规格之间的分割符 + +**返回值** + +操作成功返回 `true`,否则返回 `false`。 + +除了使用 SDK 提供的方法,同样可以借助七牛云存储提供的命令行辅助工具 [qboxrsctl](https://github.com/qiniu/devtools/tags) 达到同样的目的: + + // 设置预览图分隔符 + qboxrsctl separator + + + +#### 3. 设置水印预览图规格别名 + +通过步骤2中所描述的水印预览图 URL 来访问打水印后的图片毕竟较为繁琐,因此可以通过为该水印预览图规格设置“别名”的形式来访问。如: + +别名(Name) | 规格(Style) | 说明 +----------- | ------------ | ------- +small.jpg | imageView/0/w/120/h/90 | 大小为 120x90,不打水印 +middle.jpg | imageView/0/w/440/h/330/watermark/1 | 大小为 440x330,打水印 +large.jpg | imageView/0/w/1280/h/760/watermark/1 | 大小为 1280x760,打水印 + + +SDK 提供了 `Qiniu::RS.set_style` 函数可以定义预览图规格别名,该函数原型如下: + + Qiniu::RS.set_style(bucket, name, style) + +**参数** + +bucket +: 必须,字符串类型(String),图片所在的 Bucket(资源表) 名称 + +name +: 必须,字符串类型(String),预览图规格名称(别名) + +style +: 必须,字符串类型(String),具体的规格样式 + +**返回值** + +操作成功返回 `true`,否则返回 `false` 。 + +除了使用 SDK 提供的方法,同样也可以借助七牛云存储提供的命令行辅助工具 [qboxrsctl](https://github.com/qiniu/devtools/tags) 达到同样的目的: + + // 为 下面的所有图片设置名为