0

我已經寫了下面的代碼使用service account上傳圖片到自己的谷歌驅動器。簡單API圖片上傳到谷歌驅動器

我的代碼成功返回,給我一個ID回來,但沒有什麼出現在我的實際谷歌驅動器。

from django.conf import settings 
import os 

from apiclient.discovery import build 
from apiclient.http import MediaFileUpload 
from oauth2client.service_account import ServiceAccountCredentials 

def get_service(api_name, api_version, scope, key_file_location): 
    credentials = ServiceAccountCredentials.from_json_keyfile_name(key_file_location, scopes=scope) 
    service = build(api_name, api_version, credentials=credentials) 
    return service 


def setup_upload(): 
    scope = ['https://www.googleapis.com/auth/drive'] 
    key_file_location = os.path.join(os.path.dirname(settings.BASE_DIR), 'common/my-json-file.json') 
    service = get_service('drive', 'v3', scope, key_file_location) 

    file_path = os.path.join(os.path.dirname(settings.BASE_DIR), 'common/apple.png') 

    file_metadata = {'name': 'apple.png'} 
    media = MediaFileUpload(file_path, mimetype="image/png") 
    file = service.files().create(body=file_metadata, media_body=media, fields='id').execute() 
    print(file.get('id')) #this returns an actual ID 

setup_upload() 

我得到一個長串IDsetup_upload()最後一行後面。但是我的實際Google雲端硬盤上沒有顯示任何內容。我期待看到我的主目錄中彈出apple.png文件。

缺少什麼我在這裏?

回答

0

tutorial引用您鏈接到: 「您可以獲取服務帳戶的電子郵件地址,並允許它訪問您的Google驅動器上的目錄,然後它將被允許上傳到該目錄,但您無法訪問這些文件,你將需要完成第二步,給自己親自許可,更新或補丁文件的權限來訪問這些文件。」

你有沒有給你想要寫入文件的地方服務帳戶訪問?如果您尚未指定要將文件上傳到哪裏,服務帳戶可能只是將文件上傳到自己的驅動器中。

+0

謝謝你的答覆。你能否澄清我可以如何將服務帳戶訪問到我想要寫入的地方?我認爲'範圍'變量就足夠了,它會自動進入根谷歌驅動器文件夾。 – qarthandso

0

除了@ user2705223的回答,如果您希望能夠訪問它上傳的文件,那麼您必須授予您通過服務帳戶訪問它們的權限。檢查您是否擁有成功的登錄憑證並授權具有正確範圍的服務帳戶。你可以試試下面這個documentation幫你做的授權,使API請求。