簡體   English   中英

如何在 Python 中使用 Google Drive API 創建新文件夾?

[英]How can I create a new folder with Google Drive API in Python?

這個例子 我可以在創建文件夾時使用 MediafileUpload 嗎? 我怎樣才能得到 parent_id 從?

來自https://developers.google.com/drive/folder

我只知道我應該使用 mime = "application/vnd.google-apps.folder" 但我如何實施本教程以使用 Python 進行編程?

謝謝你的建議。

要在雲端硬盤上創建文件夾,請嘗試:

    def createRemoteFolder(self, folderName, parentID = None):
        # Create a folder on Drive, returns the newely created folders ID
        body = {
          'title': folderName,
          'mimeType': "application/vnd.google-apps.folder"
        }
        if parentID:
            body['parents'] = [{'id': parentID}]
        root_folder = drive_service.files().insert(body = body).execute()
        return root_folder['id']

如果你想在另一個文件夾中創建文件夾,你只需要一個父 ID,否則不要為此傳遞任何值。

如果您想要父 ID,則需要編寫一種方法來在雲端硬盤中搜索該位置中具有該父名稱的文件夾(執行 list() 調用),然后獲取該文件夾的 ID。


編輯:請注意,API 的 v3 使用列表作為“父母”字段,而不是字典。 此外, 'title'字段更改為'name'insert()方法更改為create() 對於 v3,上面的代碼將更改為以下內容:

    def createRemoteFolder(self, folderName, parentID = None):
        # Create a folder on Drive, returns the newely created folders ID
        body = {
          'name': folderName,
          'mimeType': "application/vnd.google-apps.folder"
        }
        if parentID:
            body['parents'] = [parentID]
        root_folder = drive_service.files().create(body = body).execute()
        return root_folder['id']

僅當您要插入內容時才需要上傳媒體文件。 由於您只想插入元數據(文件夾只是元數據),因此您不需要它。 一個帶有 JSON 的常規 POST 表示 foder 就足夠了。

您可以通過多種方式獲取父 ID:

  • 搜索(file.list 終點)
  • 插入文件夾:這會返回一個表示插入文件夾的 JSON,其中包含其 ID
  • 通過Web UI 自行獲取(ID 包含在您的文件夾或文件的URL 中):進入Web UI,選擇您想要的文件夾或文件,然后您可以識別URL 中的fileId。 例如: https://drive.google.com/#folders/0B8VrsrGIcVbrRDVxMXFWVkdfejQ ://drive.google.com/#folders/0B8VrsrGIcVbrRDVxMXFWVkdfejQ
    文件 ID 是 URL 的最后一部分,即。 0B8VrsrGIcVbrRDVxMXFWVkdfejQ

如何以編程方式獲取 FileID:

  1. 使用已知 fileId 的 children.list 端點來獲取此已知 ID 的子項的 ID。
  2. 使用 google drive 的搜索功能:帶有 aq 參數的 files.list 端點
  3. 使用別名:我在 Google 雲端硬盤中唯一知道的別名是root代表您的雲端硬盤的根文件夾。

使用 3. 和 1.,您可以獲得驅動器的所有 fileId。

我不知道怎樣才能更清楚

def create_folder(header, folder_name, folder_id, drive_id=None):
    url = 'https://www.googleapis.com/upload/drive/v3/files'

    file_metadata = {
        'name': folder_name,
        'mimeType': 'application/vnd.google-apps.folder',
        'parents': [folder_id]
    }
    file_withmetadata = {"data": ("metadata", json.dumps(file_metadata), "application/json; charset=UTF-8")}

    param = {"q":"'%s' in parents" %folder_id, "supportsAllDrives":"true"}
    if drive_id is not None:
        param['driveId'] = drive_id

    r = requests.post(
        url,
        headers=header,
        params=param,
        files=file_withmetadata
    )

    return json.loads(r.text)

暫無
暫無

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

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