简单API图片上传到谷歌驱动器
问题描述:
我已经写了下面的代码使用service account上传图片到自己的谷歌驱动器。简单API图片上传到谷歌驱动器
我的代码成功返回,给我一个ID
回来,但没有什么出现在我的实际谷歌驱动器。
from django.conf import settings
import os
from apiclient.discovery import build
from apiclient.http import MediaFileUpload
from oauth2client.service_account import ServiceAccountCredentials
def get_service(api_name, api_version, scope, key_file_location):
credentials = ServiceAccountCredentials.from_json_keyfile_name(key_file_location, scopes=scope)
service = build(api_name, api_version, credentials=credentials)
return service
def setup_upload():
scope = ['https://www.googleapis.com/auth/drive']
key_file_location = os.path.join(os.path.dirname(settings.BASE_DIR), 'common/my-json-file.json')
service = get_service('drive', 'v3', scope, key_file_location)
file_path = os.path.join(os.path.dirname(settings.BASE_DIR), 'common/apple.png')
file_metadata = {'name': 'apple.png'}
media = MediaFileUpload(file_path, mimetype="image/png")
file = service.files().create(body=file_metadata, media_body=media, fields='id').execute()
print(file.get('id')) #this returns an actual ID
setup_upload()
我得到一个长串ID
从setup_upload()
最后一行后面。但是我的实际Google云端硬盘上没有显示任何内容。我期待看到我的主目录中弹出apple.png
文件。
缺少什么我在这里?
答
从tutorial引用您链接到: “您可以获取服务帐户的电子邮件地址,并允许它访问您的Google驱动器上的目录,然后它将被允许上传到该目录,但您无法访问这些文件,你将需要完成第二步,给自己亲自许可,更新或补丁文件的权限来访问这些文件。”
你有没有给你想要写入文件的地方服务帐户访问?如果您尚未指定要将文件上传到哪里,服务帐户可能只是将文件上传到自己的驱动器中。
答
除了@ user2705223的回答,如果您希望能够访问它上传的文件,那么您必须授予您通过服务帐户访问它们的权限。检查您是否拥有成功的登录凭证并授权具有正确范围的服务帐户。你可以试试下面这个documentation帮你做的授权,使API请求。
谢谢你的答复。你能否澄清我可以如何将服务帐户访问到我想要写入的地方?我认为'范围'变量就足够了,它会自动进入根谷歌驱动器文件夹。 – qarthandso