我尝试将Google云端硬盘电子表格下载为Excel文件。据我所知,Google Drive API应该通过为export_media请求指定不同的mime类型来实现这一点。
根据教程脚本,我可以成功将电子表格下载为CVS和Open Office表格。太好了!
但是,如果将mime类型设置为application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
- 正如为MS Excel指定的那样,下载程序将继续从流中读取而不会停止并且不会增加状态进度。
完整脚本为here。要运行,请按照说明在Google Drive API文档here
中创建应用违规代码在这里:
file_id = 'my spreadsheet id'
request = service.files().export_media(fileId=file_id, mimeType='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
fh = FileIO('data.xls', 'wb')
downloader = MediaIoBaseDownload(fh, request)
done = False
while done is False:
status, done = downloader.next_chunk()
print("Download %d%%." % int(status.progress() * 100))
继续打印Download 0%
并永不停止。
答案 0 :(得分:0)
事实证明,%(Filename)
依赖于'内容范围MediaBaseIODownload
内容长度`来了解何时停止。
or
但是,在我可以看到的调试器中,它们不在响应中。因此,它不知道什么时候完成。
if 'content-range' in resp:
content_range = resp['content-range']
length = content_range.rsplit('/', 1)[1]
self._total_size = int(length)
elif 'content-length' in resp:
self._total_size = int(resp['content-length'])
解决方案是不进行部分下载,而是完全下载:
if self._progress == self._total_size:
self._done = True