我已编写以下代码,使用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"
文件。
我在这里缺少什么?
答案 0 :(得分:0)
从您链接到的tutorial引用: “您可以获取服务帐户的电子邮件地址,并允许其访问您的Google云端硬盘上的目录。然后,它将被允许上传到该目录,但您无法访问这些文件。您需要完成第二步,通过更新或修补文件权限,授予您个人访问这些文件的权限。“
您是否已授予服务帐户访问要写入文件的位置的权限?如果您尚未指定上传文件的位置,则服务帐户可能只是将文件上传到自己的云端硬盘中。
答案 1 :(得分:0)
除了@ user2705223的回答之外,如果您希望能够访问上传的文件,那么您必须通过服务帐户授予自己访问权限的权限。检查您是否拥有成功的登录凭据并授权具有正确范围的服务帐户。您可以尝试按照此documentation来帮助您执行API请求的授权。