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
相关产品推荐
相关产品推荐

