我创建了一个简单的网络应用,可以使用Auth2.0身份验证在Google云端硬盘中保存一些文件。当我使用下面的代码时,一切都运行良好,但我在这里遇到了一些困难。第一个是将内容保存在不同的指定文件夹中。下面的代码将文件保存在根文件夹中,我无法弄清楚原因。 upload_folder_id 显然具有良好的价值,我在这里省略了。
from apiclient.discovery import build
from httplib2 import Http
from oauth2client import file, client, tools
try:
import argparse
flags = argparse.ArgumentParser(parents=[tools.argparser]).parse_args()
except ImportError:
flags = None
SCOPES = 'https://www.googleapis.com/auth/drive.file'
store = file.Storage('storage.json')
creds = store.get()
if not creds or creds.invalid:
flow = client.flow_from_clientsecrets('client_secret.json', SCOPES)
creds = tools.run_flow(flow, store, flags) \
if flags else tools.run(flow, store)
DRIVE = build('drive', 'v3', http=creds.authorize(Http()))
upload_folder_id = <my_folder_id>
FILES = (('hello.txt', None)) # More files will be added after
for filename, mimeType in FILES:
metadata = {'name': filename}
if mimeType:
metadata['mimeType'] = mimeType
''' I tried all this possibilities too
metadata['parentId'] = upload_folder_id
metadata['folderId'] = upload_folder_id
'''
metadata['parents'] = [{'id': upload_folder_id}]
res = DRIVE.files().create(body=metadata, media_body=filename).execute()
if res:
print('Uploaded "%s" (%s)' % (filename, res['mimeType']))
第二个是身份验证步骤。我第一次连接应用程序时,我被重定向到谷歌网页,我授予API访问权限。有没有办法在不通过Web浏览器验证访问权限的情况下执行此操作? (对我的本地测试来说这很好,但是我不能在生产服务器上这样做。)
答案 0 :(得分:0)
下面的代码将文件保存在根文件夹中,我无法弄明白为什么.upload_folder_id显然具有良好的价值,我在这里省略了。
parents
应该是一个字符串数组,所以id
属性不需要存在;只需指定父文件夹ID,我认为你很高兴
有没有办法在不通过网络浏览器验证访问权限的情况下执行此操作?
同意页面对于用户的身份验证过程至关重要,我不认为抓取可以成为解决方案。我能想到的另一种选择是使用服务帐户,这是一种服务器到服务器的实现,因此用户无需登录。这里的缺点是用户不拥有数据,服务帐户也是如此。