6

这个例子。我可以使用 MediafileUpload 创建文件夹吗?我怎样才能得到parent_id?

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

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

谢谢你的建议。

4

3 回答 3

20

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

    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']
于 2013-03-12T13:16:22.683 回答
1

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

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

  • 搜索(file.list 端点)
  • 插入文件夹:这将返回一个 JSON 表示插入的文件夹,包含其 ID
  • 通过 Web UI 自己获取(ID 包含在您的文件夹或文件的 URL 中):转到 Web UI,选择您想要的文件夹或文件,然后您可以在 URL 中识别 fileId。ex :https://drive.google.com/#folders/0B8VrsrGIcVbrRDVxMXFWVkdfejQ
    文件 ID 是 URL 的最后一部分,即。0B8VrsrGIcVbrRDVxMXFWVkdfejQ

如何以编程方式获取 FileID:

  1. 使用 children.list 端点使用已知的 fileId 来获取此已知 ID 的孩子的 id。
  2. 使用 google drive 的搜索功能:带 aq 参数的 files.list 端点
  3. 使用别名:我在 Google Drive 中知道的唯一一个是root您 Drive 的根文件夹。

使用 3. 和 1.,您可以获得 Drive 的所有 fileId。

我不知道我怎样才能更清楚

于 2012-11-26T10:52:24.833 回答
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)
于 2019-12-03T09:01:31.133 回答