一个C++项目需要下载azure blob上的数据,数据是有鉴权的,不能直接通过URL进行下载。由于只需要下载,不需要上传或是查询等操作,因此希望有一个简单轻量的方法实现。

azure提供了C++语言的SDK,初步看了一下,其实现比较复杂,依赖的东西也比较多,集成到现有的框架中可能会麻烦一些。因此希望可以通过REST API + libcurl的形式进行下载,遂研究了一下相关的文档,并参考了部分SDK的代码,这里进行整理总结。

鉴权需要几个信息,

  1. blob的存储账户。
  2. blob的key,这个在azure blob的访问密钥页面中可以找到。
  3. blob文件所在的container名称。
  4. blob文件名。

如果使用URL下载,那么在URL中将会包含blob文件的container名以及blob名。blob账户以及blob key需要提前获取。

在azure blob的文档中已经提到了REST API的使用方法,我这里参考了azure提供的azure-storage-cpplite这个库,这是个轻量级别的azure storage库,相较于azure-storage-cpp来说,依赖项要更少,代码也更简单,当然功能也会少一些,但对于阅读者来说将会简单很多。

实现代码之前需要先安装libcurlssl库,ubuntu或是debian可以使用命令apt install libssl-dev libcurl4-openssl-dev安装,如果是centos,那么使用命令yum install openssl-devel libcurl-devel来安装。

完整的代码见github