2016-10-21 57 views
0

我試圖找出如何上傳文件使用REST API,以谷歌的雲存儲到谷歌雲存儲,我不想使用的客戶端庫。上傳失敗使用REST API POST

我閱讀文檔,但它不是在這個初學者躥樂於助人,

誰能給我一步一步如何做到這一點?以及網址/標題/正文格式應該如何,如果還可以給我一個非常有用的例子。

回答

0

如果你不打算使用任何輔助庫,也是一個初學者,實現上傳到GCS將可能是驗證自己的最難的部分。現在讓我們忽略它。

上傳的目的是谷歌雲存儲最簡單的方法是讓一個HTTPS調用storage.googleapis.com看起來像這樣:

PUT /your-bucket-name/your-object.txt HTTP/1.1 
Authorization: (YOUR ACCESS TOKEN GOES HERE) 
Content-Length: 20 
Content-Type: text/plain-or-whatever; charset=utf-8 
Host: storage.googleapis.com 
User-Agent: YourApplication/1.0 

This is a test file 

這將上傳了一個名爲「您的對象文件。 txt「類型爲」text/plain-or-whatever「到存儲桶」your-bucket-name「中,內容爲」這是一個測試文件「。

如果你的水桶允許匿名用戶上傳文件(你不應該這樣做),那麼就是不包括授權線即可大功告成。

現在,因爲你真的不希望使用任何客戶端庫,這可能包括谷歌的OAuth庫,你將需要自己實現的授權,所以讓我給你一個概述。

首先,如果您想立即嘗試此操作,請安裝「gcloud」工具,使用「gcloud auth login」進行登錄,並打印帶有gcloud auth print-access-token的訪問令牌。然後使用授權標頭Authorization: Bearer whatever.gcloudprintedout。這樣,您可以快速關閉並使用GCS運行。但令牌只會持續一個小時左右,所以您需要實現OAuth。

谷歌雲API使用OAuth來處理他們的要求,這是一個強大的,但不是簡單的身份驗證機制。有OAuth的與谷歌是如何工作的豐富的文檔:https://developers.google.com/identity/protocols/OAuth2

而且也有關於授權谷歌雲請求的一般信息:https://cloud.google.com/docs/authentication

如果您運行的上谷歌的雲計算技術,如應用程序引擎或GCE應用,AUTH會比較容易,但我會假設你在你自己的機器上運行這個。我將進一步假設您希望您的應用程序擁有自己的身份,而不是簡單地將您作爲上載流程的一部分登錄。對於這種情況,您需要一個服務帳戶,該帳戶將具有關聯的私鑰。

的服務帳戶的基本流程是,你將創建訪問憑據JWT請求,然後加密簽名用私鑰該請求,然後發送簽名的請求,以谷歌。它會返回一個令牌,稍後可以傳遞給您的實際上傳請求。您可以繼續使用該令牌直至過期,屆時您需要構建另一個JWT請求來請求另一個令牌。

此外,客戶端庫完全爲您完成整個過程。我正在描述獨自完成所有事情的方法。

+0

感謝布蘭登的詳細答案,我經歷了生成令牌的整個過程,我能夠獲得JWT,但是當我將它添加到myurl作爲斷言變量時,它給了我一個不良請求錯誤: –

+0

錯誤: { 「錯誤」:「invalid_grant」 「ERROR_DESCRIPTION」:「無效的智威湯遜:令牌必須是一個短暫的令牌,並在合理的時間內」 「error_uri」:「」 } –

+0

您的時鐘可能是錯誤的,或者你問了太多時間:http://stackoverflow.com/questions/30115933/access-token-and-refresh-token-giving-invalid-grant-in-google-plus-in-python/30117441#30117441 –