Ruby中使用七牛云免费空间存储图片加速

Posted by baicai on May 7, 2016

现在网上很多免费的空间,服务器,有的是因为在国外,有的是流量和存储有限制。因此,使用七牛云存储的免费流量和空间,加速网站加载速度。</p>

可以参考这篇文章:http://www.liubaicai.net/articles/731,介绍了自定义编辑框插件,图片上传到某地的方法。下面介绍了ruby服务后台的操作。</p>

七牛云提供了ruby的SDK。</p>

gem 'qiniu'
bundle install

登录七牛开发者平台,查看 Access Key 和 Secret Key

初始化环境,并且设置默认的 ACCESS_KEY 和 SECRET_KEY:</span></p>

require 'qiniu'

Qiniu.establish_connection! :access_key => '',
                            :secret_key => ''

如果是在rails中,可以在初始化文件中添加</font>YOUR_RAILS_APP/config/initializers/qiniu_sdk.rb</p>


文件上传


直接上传


require 'qiniu'

# 构建鉴权对象
Qiniu.establish_connection! :access_key => 'Access_Key',
                            :secret_key => 'Secret_Key'

#要上传的空间
bucket = 'Bucket_Name'

#上传到七牛后保存的文件名
key = 'my-ruby-logo.png'


#构建上传策略
put_policy = Qiniu::Auth::PutPolicy.new(
    bucket,      # 存储空间
    key,     # 最终资源名,可省略,即缺省为“创建”语义,设置为nil为普通上传 
    3600    #token过期时间,默认为3600s
)

#生成上传 Token
uptoken = Qiniu::Auth.generate_uptoken(put_policy)

#要上传文件的本地路径
filePath = './ruby-logo.png'

#调用upload_with_token_2方法上传
code, result, response_headers = Qiniu::Storage.upload_with_token_2(
     uptoken, 
     filePath,
     key
)

#打印上传返回的信息
puts code
puts result

文件下载


require 'qiniu'

Qiniu.establish_connection! :access_key => 'AK',
                            :secret_key => 'SK'

#构建私有空间的链接
primitive_url = 'http://domain/key'
download_url = Qiniu::Auth.authorize_download_url(primitive_url)
puts download_url

对于public显示的文件,也可以直接拼出地址下载。</p>

图片裁剪缩放


接口规格

imageView2//w/
                /h/
               /format/
              /interlace/
             /q/
            /ignore-error/

例如,生成一张200x200的缩略图:</p>

http://78re52.com1.z0.glb.clouddn.com/resource/gogopher.jpg?imageView2/1/w/200/h/200

其中 <mode> 分为如下几种情况:&nbsp;

模式 说明

/0/w/<LongEdge>/h/<ShortEdge>

限定缩略图的长边最多为<LongEdge>,短边最多为<ShortEdge>,进行等比缩放,不裁剪。如果只指定 w 参数则表示限定长边(短边自适应),只指定 h 参数则表示限定短边(长边自适应)。</span></font></p>


/1/w/<Width>/h/<Height>

限定缩略图的宽最少为<Width>,高最少为<Height>,进行等比缩放,居中裁剪。转后的缩略图通常恰好是 <Width>x<Height> 的大小(有一个边缩放的时候会因为超出矩形框而被裁剪掉多余部分)。如果只指定 w 参数或只指定 h 参数,代表限定为长宽相等的正方图。</span></font></p>


/2/w/<Width>/h/<Height>

限定缩略图的宽最多为<Width>,高最多为<Height>,进行等比缩放,不裁剪。如果只指定 w 参数则表示限定宽(长自适应),只指定 h 参数则表示限定长(宽自适应)。它和模式0类似,区别只是限定宽和高,不是限定长边和短边。从应用场景来说,模式0适合移动设备上做缩略图,模式2适合PC上做缩略图。</span></font></p>


/3/w/<Width>/h/<Height>

限定缩略图的宽最少为<Width>,高最少为<Height>,进行等比缩放,不裁剪。如果只指定 w 参数或只指定 h 参数,代表长宽限定为同样的值。你可以理解为模式1是模式3的结果再做居中裁剪得到的。</span></font></p>


/4/w/<LongEdge>/h/<ShortEdge>

限定缩略图的长边最少为<LongEdge>,短边最少为<ShortEdge>,进行等比缩放,不裁剪。如果只指定 w 参数或只指定 h 参数,表示长边短边限定为同样的值。这个模式很适合在手持设备做图片的全屏查看(把这里的长边短边分别设为手机屏幕的分辨率即可),生成的图片尺寸刚好充满整个屏幕(某一个边可能会超出屏幕)。</span></font></p>


/5/w/<LongEdge>/h/<ShortEdge>

限定缩略图的长边最少为<LongEdge>,短边最少为<ShortEdge>,进行等比缩放,居中裁剪。如果只指定 w 参数或只指定 h 参数,表示长边短边限定为同样的值。同上模式4,但超出限定的矩形部分会被裁剪。</span></font></p>


注意:</span></font></p>

可以仅指定w参数或h参数。</span></font></p>

新图的宽/高/长边/短边,不会比原图大,即本接口总是缩小图片。</span></font></p>

所有模式都可以只指定w参数或只指定h参数,并获得合理结果。在w、h为限定最大值时,未指定某参数等价于将该参数设置为无穷大(自适应);在w、h为限定最小值时,未指定参数等于给定的参数,也就限定的矩形是正方形。</span></font></p>

处理后的图片单边最长不得超过9999,宽和高的乘积最大不得超过2500万。</span></font></p>

处理前的图片w和h参数不能超过3万像素,总像素不能超过1亿5000万像素。</span></font></p>


参数名称 必填 说明

/format/<Format>

新图的输出格式</span></font></p>

取值范围:jpg,gif,png,webp等,默认为原图格式。</span></font></p>

参考支持转换的图片格式。</span></font></p>


/interlace/<Interlace>

是否支持渐进显示

取值范围:1 支持渐进显示,0不支持渐进显示(默认为0)。</span></font></p>

适用目标格式:jpg

效果:网速慢时,图片显示由模糊到清晰。</span></font></p>


/q/<Quality>

新图的图片质量</span></font></p>

取值范围是[1, 100],默认75。</span></font></p>

七牛会根据原图质量算出一个修正值,取修正值和指定值中的小值。</span></font></p>

注意:</span></font></p>

● 如果图片的质量值本身大于90,会根据指定值进行处理,此时修正值会失效。</span></font></p>

● 指定值后面可以增加 !,表示强制使用指定值,如100!。</span></font></p>

● 支持图片类型:jpg。</span></font></p>


/ignore-error/<ignoreError>

可选</span></font></p>

取值:1

● 未设置此参数时,正常返回处理结果。</span></font></p>

● 设置了此参数时,若图像处理的结果失败,则返回原图。</span></font></p>

● 设置了此参数时,若图像处理的结果成功,则正常返回处理结果。</span></font></p>


<Quality>修正值算法:min[90, 原图quality*sqrt(原图长宽乘积/结果图片长宽乘积)]


更多方法参考文档:http://developer.qiniu.com/code/v6/sdk/ruby.html