gpt4 book ai didi

python - Google Drive API 下载文件 - python - 没有下载文件

转载 作者:太空狗 更新时间:2023-10-29 17:11:55 26 4
gpt4 key购买 nike

我尝试了多种方法通过 oauth 和 API 从谷歌驱动器下载文件,但是我无法下载文件。我相信我已经正确验证了。运行我的代码后,看起来下载文件成功(没有错误),但没有下载任何文件。

这是我到目前为止尝试过的代码:

def download_file(file_id, mimeType):
if "google-apps" in mimeType:
return
request = drive_service.files().get(fileId=file_id)
fh = io.BytesIO()
downloader = MediaIoBaseDownload(fh, request)
done = False
while done is False:
status, done = downloader.next_chunk()
print "Download %d%%." % int(status.progress() * 100)

但是,这会导致“下载 100%”。正在打印到控制台,但没有下载文件。

我也试过:

def download2(download_url):
resp, content = drive_service._http.request(download_url)
if resp.status == 200:
print 'Status: %s' % resp
return content
else:
print 'An error occurred: %s' % resp
return None

这也不会生成下载的文件,但会给我一条 200 消息。

这两个似乎都在正确地与 API 建立联系。是否需要执行额外的步骤才能在我的计算机上实际获取文件?

编辑:

这是我的代码的剩余部分:

import json
import webbrowser

import httplib2
import io
from apiclient.http import MediaIoBaseDownload

from apiclient import discovery
from oauth2client import client

if __name__ == '__main__':
flow = client.flow_from_clientsecrets(
'client_secrets.json',
scope='https://www.googleapis.com/auth/drive.readonly',
redirect_uri='urn:ietf:wg:oauth:2.0:oob')

auth_uri = flow.step1_get_authorize_url()
webbrowser.open(auth_uri)

auth_code = raw_input('Enter the auth code: ')

credentials = flow.step2_exchange(auth_code)
http_auth = credentials.authorize(httplib2.Http())

drive_service = discovery.build('drive', 'v3', http_auth) #also tried v2
files = drive_service.files().list().execute()
for f in files['files']:
#call one of the two download methods with the proper arguments

最佳答案

从 BytesIO 更改为 FileIO 允许实际下载文件。这是我将代码修改为的行:

fh = io.FileIO(filename, 'wb')

这是允许我下载文件的完整代码:

def download_file(file_id, mimeType, filename):
if "google-apps" in mimeType:
# skip google files
return
request = drive_service.files().get_media(fileId=file_id)
fh = io.FileIO(filename, 'wb')
downloader = MediaIoBaseDownload(fh, request)
done = False
while done is False:
status, done = downloader.next_chunk()
print "Download %d%%." % int(status.progress() * 100)


if __name__ == '__main__':
flow = client.flow_from_clientsecrets(
'client_secrets.json',
scope='https://www.googleapis.com/auth/drive.readonly',
redirect_uri='urn:ietf:wg:oauth:2.0:oob')

auth_uri = flow.step1_get_authorize_url()
webbrowser.open(auth_uri)

print auth_uri

auth_code = raw_input('Enter the auth code: ')

credentials = flow.step2_exchange(auth_code)
http_auth = credentials.authorize(httplib2.Http())

drive_service = discovery.build('drive', 'v3', http_auth)
files = drive_service.files().list().execute()
for f in files['files']:
print f['name']
download_file(f['id'], f['mimeType'], f['name'])

关于python - Google Drive API 下载文件 - python - 没有下载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36173356/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com