Python Google驱动器API v3(找不到GoogleAppClient.errors.HttpError 404文件)

Python Google驱动器API v3(找不到GoogleAppClient.errors.HttpError 404文件),python,google-drive-api,service-accounts,Python,Google Drive Api,Service Accounts,我正在尝试上载在我的计算机上创建的pdf文件,路径为output\u pdfs/.pdf。我正在代码中使用要将文件上载到的父文件夹的id。我得到了一个HttpError 404“找不到文件”,指的是父ID(父文件夹)。我已经读过,我可以通过使用childID来获取parentID,但是这不起作用,因为我想创建一个子文件夹(child),因为它可能还不存在 我已经完成了以下步骤: 与服务帐户共享Google Drive文件夹,并将其设置为“Content Manager” 在我的python代码中

我正在尝试上载在我的计算机上创建的pdf文件,路径为
output\u pdfs/.pdf
。我正在代码中使用要将文件上载到的父文件夹的
id
。我得到了一个HttpError 404“找不到文件”,指的是父ID(父文件夹)。我已经读过,我可以通过使用childID来获取parentID,但是这不起作用,因为我想创建一个子文件夹(child),因为它可能还不存在

我已经完成了以下步骤:

  • 与服务帐户共享Google Drive文件夹,并将其设置为“Content Manager”
  • 在我的python代码
    中为我的服务帐户添加了身份验证作用域https://www.googleapis.com/auth/drive“
  • 确保我的gcloud凭据设置正确,
    gcloud auth list
    显示我使用的凭据与共享工作表的凭据相同
  • def交付到谷歌硬盘(输出pdf、creds、parentFolderID、folderToCreate):
    驱动器\服务=构建('drive','v3',凭据=凭据)
    文件\u元数据={
    “家长”:[parentFolderID],
    “名称”:输出\u pdf
    }
    media=MediaFileUpload(output\u pdf,mimetype='application/pdf',resumable=True)
    
    file=drive\u service.files().create(body=file\u元数据“”)“因此,由于文件夹位于共享驱动器中,在列出父文件夹时,您需要使用
    includeItemsFromAllDrives=True
    supportsAllDrives=True
    并在创建文件时再次使用
    supportsAllDrives=True
    。我已经测试了这段代码,它按名称查找父文件夹,创建一个文件并上传它

    def deliver_to_google_drive(output_pdf, creds, folderToStorePdfs):
        drive_service = build('drive', 'v3', credentials=creds)
        page_token = None
        while True:
            query = "mimeType = 'application/vnd.google-apps.folder' and name = '%s'" % folderToStorePdfs
            response = drive_service.files().list(q=query,
                                                  spaces='drive',
                                                  fields='nextPageToken, files(id, name)',
                                                  includeItemsFromAllDrives=True,
                                                  supportsAllDrives=True,
                                                  pageToken=page_token).execute()
                                                  #NB includeItemsFromAllDrives and supportsAllDrives needed for shared drives
            for folder in response.get('files', []):
                print('Found folder: %s (%s)' % (folder.get('name'), folder.get('id')))
                print(output_pdf)
                filename = output_pdf.split('/')[1]
    
                file_metadata = {
                    'parents':[folder.get('id')],
                    'name': filename
                }
                media = MediaFileUpload(output_pdf, mimetype='application/pdf',resumable=True)
                file = drive_service.files().create(body=file_metadata,
                                                    media_body=media,
                                                    fields='id',supportsAllDrives=True).execute()
                print('File ID: %s' % file.get('id'))
            page_token = response.get('nextPageToken', None)
            if page_token is None:
                break
    
    

    这回答了你的问题吗?Nikko J.对迟来的回复表示歉意。不完全是因为我已经将文件夹与服务帐户的电子邮件地址共享了。
    def deliver_to_google_drive(output_pdf, creds, folderToStorePdfs):
        drive_service = build('drive', 'v3', credentials=creds)
        page_token = None
        while True:
            query = "mimeType = 'application/vnd.google-apps.folder' and name = '%s'" % folderToStorePdfs
            response = drive_service.files().list(q=query,
                                                  spaces='drive',
                                                  fields='nextPageToken, files(id, name)',
                                                  includeItemsFromAllDrives=True,
                                                  supportsAllDrives=True,
                                                  pageToken=page_token).execute()
                                                  #NB includeItemsFromAllDrives and supportsAllDrives needed for shared drives
            for folder in response.get('files', []):
                print('Found folder: %s (%s)' % (folder.get('name'), folder.get('id')))
                print(output_pdf)
                filename = output_pdf.split('/')[1]
    
                file_metadata = {
                    'parents':[folder.get('id')],
                    'name': filename
                }
                media = MediaFileUpload(output_pdf, mimetype='application/pdf',resumable=True)
                file = drive_service.files().create(body=file_metadata,
                                                    media_body=media,
                                                    fields='id',supportsAllDrives=True).execute()
                print('File ID: %s' % file.get('id'))
            page_token = response.get('nextPageToken', None)
            if page_token is None:
                break