对Ali OSS和百度云存储的封装
     先在libcloud.storage.provider文件中添加Ali OSS provider和Baidu provider,在DRIVERS中添加如下代码:
          Provider.ALI_OSS:
          ('libcloud.storage.drivers.ali_oss','OSSStorageDriver'),
          Provider.BAIDU:
          ('libcloud.storage.drivers.baidu','BCSStorageDriver')
 
     然后,在libcloud.storage.drivers中编辑文件ali_oss.py和baidu.py,在其中分别定义相应的Response、Connection和对应的StorageDriver类即可。
     Ali OSS 接口规范清晰,完全依照Amazon S3式规范,故可以直接继承S3相应类实现。具体方法可参照google storage封装实现。
     相反,百度云存储的接口规范就不那么清晰了,它更像是S3和CloudFiles两种风格的杂糅,返回信息格式为JSON,认证方式却是请求签名,逻辑结构也是Bucket + Object。
     对百度云存储(BCS)访问接口的封装,BCSResponse类直接继承自JsonResponse,其中重定义success()函数即可,BCSRawResponse类直接继承自BCSResponse和RawResponse。BCSConnection类继承自ConnectionUserAndKey,其中依照BCS签名算法(http://developer.baidu.com/wiki/index.php?title=docs/cplat/bcs/access/signed-url)定义签名计算函数_calculate_signature(),并重定义pre_connect_hook()、connect()和request()函数。BCSStorageDriver类继承自StorageDriver,参数设置中注意将支持分块编码设为False,即不支持。在对诸多RESTful风格接口封装过程中,可参照CloudFiles代码,但要注意操作成功和失败BCS返回的状态码和CloudFiles截然不同,并且有时仅凭状态码无法判断具体错误原因,还需要借助返回error信息。封装过程中越来越感觉BCS不成熟(http://developer.baidu.com/wiki/index.php?title=docs/cplat/stor/api#.E7.AD.BE.E5.90.8D.E7.AE.97.E6.B3.95)。
 
  今天刚刚发现,百度也仿照阿里云,对外发布了多种云服务,其中对象存储服务名为BOS。下一步考虑封装BOS,替换掉我认为极不成熟的BCS。

libcloud代码研究(二)——云服务封装的更多相关文章

  1. libcloud代码研究(三)——bugs

    Bug 1:对不可迭代类进行迭代(libcloud.storage.driver.cloudfile line. 141-142)      使用libcloud连接自搭建swift服务,自己在服务器 ...

  2. libcloud代码研究(一)——基本架构

    libcloud是apache下整合多种云服务接口的项目.最近,在研究libcloud代码的同时,将阿里云存储(Ali OSS)和百度云存储用libcloud storage driver规范进行封装 ...

  3. dedecms代码研究二

    dedecms代码研究(2)从index开始现在继续,今天讲的主要是dedecms的入口代码.先打开index.PHP看看里面是什么吧.打开根目录下的index.php嗯映入眼帘的是一个if语句.检查 ...

  4. Sql Server数据库备份脚本以及如何在阿里云云数据库RDS还原数据库(代码源自阿里云)

    今天研究阿里云服务数据库的迁移,备份和还原的时候,在阿里云web后台发现了一个很好用的sql脚本,就默默地偷了过来,它可以支持全量备份,差异备份和日志备份,代码解释也都很清楚,我也尝试着跑了一下,性能 ...

  5. [转]在 Azure 云服务上设计大规模服务的最佳实践

    本文转自:http://technet.microsoft.com/zh-cn/magazine/jj717232.aspx 英文版:http://msdn.microsoft.com/library ...

  6. 如何在Azure上创建和部署云服务

    Azure 管理门户提供两种方法可用来创建和部署一个云服务:快速创建和自定义创建. 本主题说明如何使用快速创建方法来创建新的云服务,然后使用上传来上载和部署一套在 Azure 的云服务.当您使用此方法 ...

  7. Windows Azure -Azure 网站、云服务和虚拟机的对比

    Azure 网站.云服务和虚拟机对比 概述 Azure提供了几种方法来承载网站: Azure网站.云服务和虚拟机.本文帮助您了解选项和为您的Web应用程序做出正确选择. Azure网站是大多数web应 ...

  8. Bmob移动后端云服务平台--Android从零開始--(二)android高速入门

    Bmob移动后端云服务平台--Android从零開始--(二)android高速入门 上一篇博文我们简介何为Bmob移动后端服务平台,以及其相关功能和优势. 本文将利用Bmob高速实现简单样例,进一步 ...

  9. 【Azure 云服务】在Cloud Service的代码中如何修改IIS Application Pool的配置呢? 比如IdleTimeout, startMode, Recycling.PeriodicRestart.Time等

    什么是 PaaS?Platform as a Service 平台即服务 (PaaS) 是云中的完整开发和部署环境,你可以使用其中资源交付内容,从基于云的简单应用到启用云的复杂企业应用程序皆可.你以即 ...

随机推荐

  1. bzoj 1367 [ Baltic 2004 ] sequence —— 左偏树

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1367 好题啊!论文上的题: 论文上只给出了不下降序列的求法: 先考虑特殊情况,如果原序列上升 ...

  2. 【高德地图API】Pivot控件中加载地图并禁止Pivot手势

    如题,解决方案,参考[Windows phone应用开发[20]-禁止Pivot手势]http://www.cnblogs.com/chenkai/p/3408658.html. xaml代码清单   ...

  3. PCB genesis Slot槽转钻孔(不用G85命令)实现方法

    PCB钻Slot槽一般都采用G85命令钻槽孔,而采用G85命令工程CAM无法准确的知道Slot槽钻多少个孔,并不能决定钻槽孔的顺序,因为采用G85命令钻孔密度与钻槽顺序由钻机本身决定的.在这里介绍一种 ...

  4. keystone身份认证服务

    Keystone介绍 keystone 是OpenStack的组件之一,用于为OpenStack家族中的其它组件成员提供统一的认证服务,包括身份验证.令牌的发放和校验.服务列表.用户权限的定义等等.云 ...

  5. matlab中增加Java VM 的堆空间(解决xml_io_tools出现的OutOfMemory问题)

    今天用MATLAB写程序,调用了xml_io_tools(很赞的一个xml读写工具包)中的函数,但是由于我要书写的文件比较大,5m左右,运行时不知道xml_io_tools中的哪一块超出了java中的 ...

  6. jQuery——尺寸位置

    获取宽:$(".box").width() 设置宽:$(".box").width(200) 获取高:$(".box").height() ...

  7. 学习笔记-java IO流总结 转载

    1.什么是IO Java中I/O操作主要是指使用Java进行输入,输出操作. Java所有的I/O机制都是基于数据流进行输入输出,这些数据流表示了字符或者字节数据的流动序列.Java的I/O流提供了读 ...

  8. servlet-响应的定时刷新

    package servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.ser ...

  9. (转)Arcgis for Js之Graphiclayer扩展详解

    http://blog.csdn.net/gisshixisheng/article/details/41208185 在前两节,讲到了两种不同方式的聚类,一种是基于距离的,一种是基于区域范围的,两种 ...

  10. 在把table表格中的数据导出到Excel的时候,以科学计数法显示位数多的数字时怎么解决?

    sbHtml.AppendFormat("<td> {0}</td>", data[i].IDcard.ToString()); sbHtml.Append ...