简单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() 

我得到一个长串IDsetup_upload()最后一行后面。但是我的实际Google云端硬盘上没有显示任何内容。我期待看到我的主目录中弹出apple.png文件。

缺少什么我在这里?

tutorial引用您链接到: “您可以获取服务帐户的电子邮件地址,并允许它访问您的Google驱动器上的目录,然后它将被允许上传到该目录,但您无法访问这些文件,你将需要完成第二步,给自己亲自许可,更新或补丁文件的权限来访问这些文件。”

你有没有给你想要写入文件的地方服务帐户访问?如果您尚未指定要将文件上传到哪里,服务帐户可能只是将文件上传到自己的驱动器中。

+0

谢谢你的答复。你能否澄清我可以如何将服务帐户访问到我想要写入的地方?我认为'范围'变量就足够了,它会自动进入根谷歌驱动器文件夹。 – qarthandso

除了@ user2705223的回答,如果您希望能够访问它上传的文件,那么您必须授予您通过服务帐户访问它们的权限。检查您是否拥有成功的登录凭证并授权具有正确范围的服务帐户。你可以试试下面这个documentation帮你做的授权,使API请求。