如何在Python中使用Google Drive API创建新文件夹?

时间:2012-11-26 04:27:17

标签: python google-drive-api

来自this example。我可以使用MediafileUpload创建文件夹吗?我怎样才能从中获取parent_id?

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

我只知道我应该使用mime =“application / vnd.google-apps.folder”但是如何实现本教程以用Python编程?

感谢您的建议。

3 个答案:

答案 0 :(得分:17)

要在云端硬盘上创建文件夹,请尝试:

    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,你需要编写一个方法来搜索Drive以查找该位置中具有该父名称的文件夹(执行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']

答案 1 :(得分:1)

仅当您要插入内容时才需要媒体文件上传。由于您只想插入元数据(文件夹只是元数据),因此您不需要它。使用JSON代表foder的常规POST就足够了。

您可以通过多种方式获取父ID:

  • 搜索(file.list结束点)
  • 插入文件夹:这会返回一个表示插入文件夹的JSON,其中包含其ID
  • 通过Web UI自行获取(ID包含在文件夹或文件的URL中):转到Web UI,选择所需的文件夹或文件,然后可以在URL中标识fileId。例如:https://drive.google.com/#folders/0B8VrsrGIcVbrRDVxMXFWVkdfejQ
    文件ID是URL的最后一部分,即。 0B8VrsrGIcVbrRDVxMXFWVkdfejQ

如何以编程方式获取FileID:

  1. 使用已知的fileId使用children.list端点来获取此已知ID的子项的ID。
  2. 使用带有q参数的google drive:files.list端点的搜索功能
  3. 使用别名:我在Google云端硬盘中唯一知道的是驱动程序的根文件夹root
  4. 使用3.和1.,您可以获取云端硬盘的所有fileIds。

    我不知道如何更清楚

答案 2 :(得分:0)

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)