• 文章
  • 一個基於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]