• 文章
  • 一个基于Google Docs的备份应用程序
2014年8月8日(最后更新:2014年8月29日)

一个基于Google Docs的备份应用程序

评分:4.0/5 (27票)
*****
一个用于将文档上传到您的Google Docs账户的C++客户端。

简介

我叫Michael Haephrati,这是我的第一篇文章。我想写一个小应用程序,它允许将多个文件和文件夹拖放到一个容器中,以便将它们发送到在线存储。这篇文章写于Google推出Google Drive之前,但它仍然可以方便地将多个文件快速上传到您的Google Drive。

本文将介绍如何开发这样一个应用程序,该应用程序将使用免费和付费的Google Docs服务来存储文档和文件在线,允许最终用户拖放文件和整个文件夹,从而将选定的文件备份到预定义的Google Docs账户。

Google Docs允许用户创建和上传文档和文件,进行编辑,并将它们存储在线。该服务是免费的;但是,在使用付费服务时不存在这些限制。

Google Docs账户类型


如在此处所述,免费账户类型在允许上传的文件类型方面存在限制。这些限制适用于以编程方式使用该服务,而不是使用在线界面 docs.google.com

为了解除一些限制,最终用户应拥有Premier账户。免费账户的用户只能上传HTML、PDF、Word、Excel、PowerPoint、OpenOffice、文本和图像文件。



实现


作为基础,我们开发了一个名为SmartHTTP的类库。

1
2
3
4
5
#define HTTP_POST_VERB                      L"POST"
#define HTTP_CONTENT_LENGTH                 L"Content-Length"
#define HTTP_CONTENT_TYPE                   L"Content-Type"
#define HTTP_MIME_BINARY                    L"application/octet-stream"
#define HTTP_MIME_FORM_URL_ENCODED          L"application/x-www-form-urlencoded" 

通过以下方式连接到Google Docs服务器:


BOOL Connect(LPCTSTR szServerName, INTERNET_PORT nServerPort = INTERNET_DEFAULT_HTTP_PORT);

以及调用:
1
2
3
4
5
if (!m_internet.Connect(GOOGLE_LOGIN_SERVER, INTERNET_DEFAULT_HTTPS_PORT))
    SetWinInetError(m_internet.GetError());
else
{
//... here we upload the documents, etc. 


Google Docs服务器定义在此:

GOOGLE_LOGIN_SERVER 是 L”www.google.com”

您可能需要注册一个Google账户。Gmail账户即可。如果您已登录,请前往 http://docs.google.com


基本上,我的应用程序是一个容器,文件和整个文件夹可以拖放到其中,导致其中所有文件(包括子文件夹中的文件)都被发送到Google Docs服务器。当应用程序启动时,容器就会出现。

关闭它会将它发送到系统托盘。系统托盘图标用于在运行时显示状态消息。例如,当一个文件被拖到容器中时,它将被添加到队列中,并出现以下消息:




关于转换为Google Docs格式

Google Docs提供将上传的文档转换为Google Docs格式。这种转换在此处进行了说明。根据我的经验,某些类型的文档在转换后可能会损坏,特别是对从右到左语言(阿拉伯语、希伯来语等)的Word文档。

因此,我添加了一个复选框,允许最终用户决定是否转换。

但在第一个文件可以复制之前,会弹出“设置”对话框,允许最终用户输入Google Docs账户详细信息。此外,还可以设置以下选项:

  • Google Apps Premier账户 - 允许指示账户类型。
  • 镜像文件夹列表 - 允许添加(或删除)本地文件夹,这些文件夹将在服务器端镜像,保留给定路径下文件和文件夹的结构。
  • 在Google Docs中重新创建文件夹结构 - 设置此选项后,文档将被复制到与本地文件夹同名的文件夹中。
  • 将所有文档上传到Google Docs的根文件夹 - 设置此选项后,文档将被复制到服务器端的根目录。
  • 在Windows启动时启动程序 - 在Windows启动时运行DocsOnline。

  • Premier账户持有者可以复制更多对普通(免费)账户有限制的文件类型。

    我直观备份的逻辑

    我认为应用程序和实用工具应该直观且易于使用。例如,我的应用程序允许拖放文件夹,通过这样做,所有文件以及所有子文件夹中的文件都会被备份,在检查服务器上已有的先前副本之后。我用于此类“直观备份”的逻辑是通过检查每个文件并计算代表其内容的哈希值来完成的。该逻辑解决了以下场景:

    1. **不同文件具有相同的名称** - 复制,但自动生成新名称。添加日志条目。

    2. **相同的不同名称文件** - 添加日志条目(稍后版本中,我们将把这些文件合并为一个具有单个名称的文件)。

    3. **相同的文件具有相同的名称** - 跳过。


    鸣谢

    Chris Maunder 编写的 SystemTraySDK类,在我应用程序中使用,是对Windows系统托盘功能的轻量级封装。它在系统托盘中添加了一个图标,并带有指定的工具提示文本和回调通知值,该值会被发送回父窗口。


    许可证


    本文以及任何相关的源代码和文件,均根据 The Code Project Open License (CPOL) 许可。

    关于作者

    Michael N. Haephrati,是一位企业家、发明家和音乐家。Haephrati曾参与过许多项目,包括HarmonySoft,设计了Amiga计算机的首款图形化多语言文字处理器Rashumon。在1995-1996年,他作为合同工在 Apple 公司库比蒂诺工作。在一家研究所工作,开始了在以色列开发信用评分领域的初步工作。他创立了Target Scoring公司,并基于地理统计数据开发了名为ThiS的信用评分系统,参与了VISA CAL、Isracard、Leumi银行和Discount银行(Target Scoring公司是以色列一家大型机构的业务发展副总裁)。
    2000 年,他创立了 Target Eye,并开发了第一个名为 Target Eye 的远程 PC 监控系统。

    其他项目包括: 数据清洗(作为 DataTune 系统的组成部分,该系统已在许多组织中实施)。





    上关注我。



    文章顶部

    附件:[DocsOnlinebyMichaelHaephratiSrc ] [one.zip] [two.zip]