云存储接口库与备份归档工具BAR介绍

随着云存储服务的普及,越来越多的应用程序需要能够将文件保存或加载到云端。这里有一个仅包含头文件的库,它允许应用程序使用抽象接口与Google Drive、OneDrive和DropBox进行交互,以保存或打开文件。该库提供了两种GUI版本,一种带有UWP(适用于Windows 10 1903+),另一种不带UWP。

快速设置

该库使用REST、GOD、UWPLib、XML、RKEY和AX库,所有这些都结合在一个单一的头文件系统中。

对于UWP接口,包含rgf2.hpp(以及1.manifest);对于非UWP接口,包含rgf3.hpp和.rc文件。

C++代码示例

以下是一些C++代码示例,展示了如何使用该库。

RGB::RGBF s; s.google.tokens.resize(3); s.google.id = "..."; // Google Drive ID s.google.secret = "..."; // Google Drive Secret s.google.tokens[0] = "... access token ..."; // Google Drive Access Token s.google.tokens[1] = "... refresh token ..."; // Google Drive Refresh Token // 对于OneDrive和DropBox也是类似的设置

需要为任何平台创建应用程序。这三个平台都使用OAUTH2进行认证。如果没有传递访问令牌,用户将被要求登录。默认情况下,这是在外部浏览器中完成的,但可以更改RunUrl函数,使用AX接口打开IWebBrowser控件。

对于OneDrive,需要在这里创建一个“Converged Application”,或者在这里创建一个新的Azure应用程序。对于Google Drive,需要在这里创建一个新的应用程序。对于DropBox,需要在这里创建一个新的应用程序。

RGBF结构

以下是RGBF结构的定义:

struct RGBF { int func = 0; // 0保存,1加载 HWND hParent = 0; bool NoBrowserKey = false; HRESULT rs = E_ABORT; GOD::ystring resultFile; GOD::ystring DefExt; std::vector Filter; std::shared_ptr goo = 0; std::shared_ptr one = 0; std::shared_ptr drop = 0; AUTH google; AUTH onedrive; AUTH db; std::wstring Title; // 保存 DWORD sz = 0; const char* d = nullptr; std::function cbf = nullptr; // 打开 std::vector* read = 0; // 仅用于旧风格 HWND hH = 0; bool InProgress = false; bool ShouldCancelProp = false; };

打开文件

以下是使用库打开文件的C++代码示例:

RGF::RGBF s; std::vector r; s.read = &r HRESULT rv = RGF::Open(s); // 使用UWP接口 HRESULT rv = RGF::Open2(s); // 使用旧接口

在成功的情况下(rv == S_*),传递的向量将被填充打开的文件的数据,无论是本地文件还是远程文件。与常见的对话框不同,RGF会为加载文件到提供的向量中。如果没有提供一个向量,那么只有文件名(或ID,如果是在云端)将被返回。

保存文件

以下是使用库保存文件的C++代码示例:

RGF::RGBF s; s.d = d.data(); s.sz = (DWORD)d.size(); s.resultFile = L"r:\\1.dat"; // 默认本地保存 s.DefExt = L"dat"; // 也会自动添加到远程文件 HRESULT rv = RGF::Save(s); // 使用UWP接口 HRESULT rv = RGF::Save2(s); // 使用旧接口

在这个函数中,需要提前提供要保存的数据。

示例项目

包含一个示例项目(VS 2019),它保存/加载XML文件中的凭据/令牌。可以通过#define USE_UWP instdfx.h来使用UWP接口。

BAR(备份归档器)项目

一直想创建自己的归档器。这里是一个简单的开源工具,它使用Compression API进行压缩,使用Remote Differential Compression高效创建增量/差异备份,并且使用RGF将它们上传到云存储。所有这些都在多线程环境中使用多核工具完成。该工具名为BAR(Backup Archiver)。

BAR归档使用标记的、可扩展的格式。每个标记包含一个头部和标记的大小。目前定义了三个标记:

  • Header:项目信息(属性、名称、时间、CRC等)
  • Item data:项目数据包含存储的项目数据。它可以是:
    • 未压缩的
    • 文件的签名,稍后用于增量备份
    • 使用Compression API定义的方法压缩(默认是COMPRESS_ALGORITHM_LZMS)
    • 基于先前备份的差异数据
    • 链接到另一个文件(如果存储重复文件)
  • 所有签名信息都放在实际压缩数据之前,这允许工具仅下载文件的开头(当它们存储在远程时),并能够创建增量备份而不需要完整的完整备份。

它可以可选地加密数据(它使用SHA-2对提供的密码进行哈希,并使用AES-256进行加密)。

命令行

BAR

备份归档器命令:

  • a - 创建新归档或更新归档
  • d - 删除文件
  • e - 从归档中提取
  • ee - 从归档文件夹中提取(主归档和差异更新)
  • l - 列出归档内容
  • ll - 列出归档内容(csv)
  • m - 合并归档
  • s - 为归档生成签名
  • t - 测试归档
  • tt - 从归档文件夹中测试(主归档和差异更新)
  • u - 差异更新归档
  • uu - 差异更新归档(备份到文件夹)
  • z - 将归档分离为仅签名

备份归档器开关:

  • -i - 包含文件
  • -p - 设置密码
  • -r - 递归子目录
  • -o - 如果归档存在,则覆盖归档
  • -s - 生成签名
  • -t - 测试运行
  • -y - 回答所有问题
  • -x - 排除文件
  • --ir - 使用正则表达式包含文件
  • --dup - 在找到重复文件时,不再存储它们,只需链接它们。
  • --xr - 使用正则表达式排除文件
  • --rgf - 指定OneDrive/GoogleDrive/DropBox的文件
  • --keep - 将归档上传到本地文件夹
  • --incr - 将增量备份添加到"u"命令。
  • --threads - 使用n个线程(如果没有指定,它将获得2*可用CPU)。

大多数开关可以与许多命令(a、e、d等)一起使用。

归档示例

BAR a target.bar -r -s --dup -x *.exe -x *.lib -x *.dll -p 12345678 c:\mytools

这将创建一个没有exe/lib文件的归档,带有签名(稍后可以用于增量备份),并带有密码12345678。

列出归档内容

BAR l target.bar BAR ll target.bar

以普通形式或CSV列出归档内容。

删除文件

BAR d target.bar *.dat

这将从归档中删除所有".dat"文件。

测试/提取

BAR t target.bar BAR e target.bar c:\r

这将测试或将归档提取到c:\r。

本地增量备份到本地文件

BAR u target3.bar --incr target1.bar --incr target2.bar -r -s ... c:\mytools

假设target1.bar和target2.bar是使用-s选项创建的,这将创建一个包含当前状态的c:\mytools的增量信息的归档。如果没有变化,将不会创建任何内容。

本地增量备份到本地文件夹

BAR uu c:\backups -r -s ... c:\mytools

假设c:\backups包含其他完整/增量备份,这将创建c:\mytools的备份。如果没有备份,将创建完整备份。如果存在完整备份,将创建该备份的增量备份。

本地增量备份到云端

BAR uu onedrive:BACKUPS\MYTOOLS --rgf 1.xml -r -s ... c:\mytools

假设1.xml包含onedrive的客户端/秘密/访问令牌(格式是RGF库使用的格式),这将创建c:\mytools的备份并将其上传到onedrive。如果没有备份,将创建完整备份。如果存在备份,将创建该备份的增量备份。

由于BAR格式在开头存储了签名,BAR不需要从服务器下载完整的完整备份,就可以生成差异备份。

从文件夹/云端提取

BAR ee c:\mybackups c:\r BAR ee onedrive:BACKUPS\ --rgf 1.xml c:\r

这将提取所有备份到c:\r。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485