You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Drive API可搜索到文件但下载提示404找不到文件如何解决

问题根因

你代码中存在明显的赋值错误:在搜索到目标版本文件夹后,给onlineVersionID赋值时错误取了文件夹的名称(file.get('name')),而不是Google Drive API要求的文件/文件夹唯一ID(file.get('id'))。你调用get_media接口时传的fileId参数实际是Version 0.1.1这类字符串,不是合法的Drive文件ID,所以触发404报错。
另外你当前要下载的对象是文件夹(mimeType = 'application/vnd.google-apps.folder'),Google Drive API的get_media接口不支持直接下载文件夹,需要额外调整存储/下载逻辑。

修复步骤
  • 第一步修正赋值错误,将onlineVersionID = file.get('name')改为onlineVersionID = file.get('id')。
  • 第二步调整下载逻辑:要么把版本包压缩为zip等格式上传到Drive,直接下载压缩包;要么先遍历版本文件夹下的实际文件,拿到文件ID后再调用下载接口。
  • 额外修正打印进度的语法错误,你当前的print和字符串分两行写,不会输出下载进度。
修复后的核心代码示例
if str(onlineLatest) > str(latest):
    page_token = None
    onlineVersionID = None
    while True:
        response = service.files().list(q=f"mimeType = 'application/vnd.google-apps.folder' and name = '{onlineLatest}'",
                                              fields='nextPageToken, files(id, name)',
                                              pageToken=page_token).execute()
        for file in response.get('files', []):
            print('Found folder: %s (id: %s)' % (file.get('name'), file.get('id')))
            # 修复赋值错误,取文件ID
            onlineVersionID = file.get('id')
        page_token = response.get('nextPageToken', None)
        if page_token is None or onlineVersionID is not None:
            break
    
    if onlineVersionID:
        # 遍历版本文件夹下的文件,找到你要下载的目标文件(示例为release.zip,替换为你实际的文件名)
        response = service.files().list(q=f"'{onlineVersionID}' in parents", fields="files(id, name)").execute()
        target_file = None
        for f in response.get('files', []):
            if f.get('name') == 'release.zip':
                target_file = f
                break
        if target_file:
            request = service.files().get_media(fileId=target_file.get('id'))
            # 直接写入本地文件,不需要额外转存
            fh = io.FileIO(f'Versions/{onlineLatest}.zip', 'wb')
            downloader = MediaIoBaseDownload(fh, request)
            done = False
            while done is False:
                status, done = downloader.next_chunk()
                # 修复打印语法
                print(f"Download {int(status.progress() * 100)}%")
    else:
        print("未找到对应版本文件夹")

内容的提问来源于stack exchange,提问作者EnderPrince

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 11:06:03