簡體   English   中英

使用python將文件上傳到特定的Google Drive文件夾

[英]Upload files to a specific Google Drive folder using python

我正在創建一個簡單的網絡應用,該應用使用Auth2.0身份驗證將一些文件保存在我的Google雲端硬盤中。 當我使用下面的代碼時,一切都工作正常,但在這里有些麻煩。 第一個是將內容保存在另一個指定的文件夾中。 下面的代碼保存在根文件夾中的文件,我想不出why.The upload_folder_id顯然具有良好的價值,我這里省略。

from apiclient.discovery import build
from httplib2 import Http
from oauth2client import file, client, tools

try:
    import argparse
    flags = argparse.ArgumentParser(parents=[tools.argparser]).parse_args()
except ImportError:
    flags = None

SCOPES = 'https://www.googleapis.com/auth/drive.file'
store = file.Storage('storage.json')
creds = store.get()
if not creds or creds.invalid:
    flow = client.flow_from_clientsecrets('client_secret.json', SCOPES)
    creds = tools.run_flow(flow, store, flags) \
            if flags else tools.run(flow, store)

DRIVE = build('drive', 'v3', http=creds.authorize(Http()))

upload_folder_id = <my_folder_id>
FILES = (('hello.txt', None)) # More files will be added after

for filename, mimeType in FILES:
    metadata = {'name': filename}

    if mimeType:
        metadata['mimeType'] = mimeType
    ''' I tried all this possibilities too
        metadata['parentId'] = upload_folder_id
        metadata['folderId'] = upload_folder_id
    '''
    metadata['parents'] = [{'id': upload_folder_id}]

    res = DRIVE.files().create(body=metadata, media_body=filename).execute()
    if res:
        print('Uploaded "%s" (%s)' % (filename, res['mimeType']))

第二步是身份驗證步驟。 第一次連接該應用程序時,我被重定向到一個Google Web頁面,並在其中授予了API訪問權限。 有沒有一種方法,而無需通過網絡瀏覽器來驗證訪問權限? (對於我的本地測試,這樣做很好,但是我將無法在生產服務器中執行此操作)。

下面的代碼將文件保存在根文件夾中,我不知道為什么.upload_folder_id顯然具有很好的價值,在此省略。

parents應該是一個字符串數組,因此不需要id屬性; 只需指定父folderId,我認為您很好

有沒有一種方法,而無需通過網絡瀏覽器來驗證訪問權限?

同意頁面對於用戶的身份驗證過程至關重要,我認為在這里抓取不是解決方案。 我可以想到的另一種選擇是讓您使用服務帳戶,這是服務器到服務器的實現,因此用戶無需登錄。 盡管這里的缺點是用戶不擁有數據,服務帳戶卻擁有數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM