下载文件附件中的媒体内容

本指南介绍了如何使用 Media 资源的 download 方法 使用 Google Chat API 从 Google Chat 中的消息下载媒体内容(文件)。

当用户向您的应用发送消息时,Google Chat 会发送一个 MESSAGE 互动事件。 应用收到的互动事件包括请求正文,即 表示互动事件的 JSON 载荷,包括所有附件。通过 取决于附件是否 已上传的内容(本地文件)或存储在云端硬盘中的文件。通过 Media 资源 表示上传到 Google Chat 的文件,例如图片、视频和文档。 通过 Attachment 资源 表示附加到消息的媒体(文件)实例。Attachment 资源包含有关连接的元数据,如 保存位置

前提条件

Python

通过文件附件下载

如需从文件附件中下载媒体,请将以下代码传递给 请求:

以下示例会下载附加到邮件的文件:

Python

  1. 在您的工作目录中,创建一个名为 chat_media_and_attachment_download.py
  2. chat_media_and_attachment_download.py 中添加以下代码:

    import io
    
    from google_auth_oauthlib.flow import InstalledAppFlow
    from googleapiclient.discovery import build
    from googleapiclient.http import MediaIoBaseDownload
    
    # Define your app's authorization scopes.
    # When modifying these scopes, delete the file token.json, if it exists.
    SCOPES = ["https://www.googleapis.com/auth/chat.messages"]
    
    def main():
        '''
        Authenticates with Chat API via user credentials,
        then downloads a file attached to a message.
        '''
    
        # Authenticate with Google Workspace
        # and get user authorization.
        flow = InstalledAppFlow.from_client_secrets_file(
                    'client_secrets.json', SCOPES)
        creds = flow.run_local_server()
    
        # Build a service endpoint for Chat API.
        chat = build('chat', 'v1', credentials=creds)
    
        # Download media resource.
        request = chat.media().download_media(
            resourceName=RESOURCE_NAME,
        )
        file = io.BytesIO()
        downloader = MediaIoBaseDownload(file, request)
    
        done = False
        while done is False:
            status, done = downloader.next_chunk()
            if status.total_size:
                print(f'Total size: {status.total_size}')
            print(f'Download {int(status.progress() * 100)}')
    
    if __name__ == '__main__':
        main()
    
  3. 在代码中,将 RESOURCE_NAME 替换为 attachmentDataRef.resourceName,您可以用它来检索 方法:

  4. 在您的工作目录中,构建并运行该示例:

    python3 chat_media_and_attachment_download.py
    

如果成功,此方法会以字节形式返回文件内容。

如需下载文件内容,请选择以下方法之一:

  • 我们建议使用 Python 中的 MediaIoBaseDownload 类,其中包含要下载的方法 分部分保存文件,并将内容保存到输出流。

  • 如果必须手动发出 HTTP 请求,请调用 download 方法并 使用 字节 范围带有 Range 标头,例如 Range: bytes=500-999