简单的API图像上传到Google云端硬盘

时间:2017-07-24 17:55:56

标签: python file-upload google-drive-api google-api-python-client service-accounts

我已编写以下代码,使用service account将图片上传到自己的Google云端硬盘。

我的代码成功返回,给了我一个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() ,但我的实际Google云端硬盘上没有任何内容。

ID

我从setup_upload()的最后一行得到一个长的apple.png字符串。但我的实际Google云端硬盘上没有任何内容。我希望在我的主目录中弹出conn = boto.connect_s3(settings.AWS_ACCESS_KEY_ID,settings.AWS_SECRET_ACCESS_KEY,host=settings.AWS_S3_HOST) try: conn = boto.connect_s3(settings.AWS_ACCESS_KEY_ID,settings.AWS_SECRET_ACCESS_KEY,host=settings.AWS_S3_HOST) except: print "S3connection Failed" else: print "S3Connection OK" 文件。

我在这里缺少什么?

2 个答案:

答案 0 :(得分:0)

从您链接到的tutorial引用: “您可以获取服务帐户的电子邮件地址,并允许其访问您的Google云端硬盘上的目录。然后,它将被允许上传到该目录,但您无法访问这些文件。您需要完成第二步,通过更新或修补文件权限,授予您个人访问这些文件的权限。“

您是否已授予服务帐户访问要写入文件的位置的权限?如果您尚未指定上传文件的位置,则服务帐户可能只是将文件上传到自己的云端硬盘中。

答案 1 :(得分:0)

除了@ user2705223的回答之外,如果您希望能够访问上传的文件,那么您必须通过服务帐户授予自己访问权限的权限。检查您是否拥有成功的登录凭据并授权具有正确范围的服务帐户。您可以尝试按照此documentation来帮助您执行API请求的授权。