所以我尝试使用 python 在谷歌驱动器上创建一个文件夹。我遵循了文档和所有内容,还使用了 0Auth2 身份验证。作为参考,这是我正在尝试调试的代码
import os
import google.auth
from googleapiclient.discovery import build
from google.oauth2 import service_account
from googleapiclient.http import MediaFileUpload
from googleapiclient.errors import HttpError
SCOPES = ['https://www.googleapis.com/auth/drive']
SERVICE_ACCOUNT_FILE = 'assets/key/key.json'
def Authenticate():
creds = service_account.Credentials.from_service_account_file(SERVICE_ACCOUNT_FILE, scopes=SCOPES)
print('Authentication Successful')
return creds
def CreateFolder():
creds = Authenticate();
try:
service = build("drive", "v3", credentials=creds);
folder_metadata = {
"name" : "AutoUpload",
"mimeType": "application/vnd.google-apps.folder",
}
folder = service.files().create(body=folder_metadata, fields="id").execute()
print(f'Folder created successfully! Folder ID: "{folder.get("id")}".')
return folder.get("id")
except HttpError as error:
print(f'An error occured: {error}')
return None
CreateFolder();
在调试过程中,我得到了预期的结果,例如身份验证成功,甚至取回了文件夹 ID。但在检查我的驱动器后,找不到该文件夹。即使我直接在驱动器上搜索该文件夹,它似乎也不在那里。我可以就可能出现的问题寻求一些帮助吗
您正在设置的元数据
folder_metadata = {
"name" : "AutoUpload",
"mimeType": "application/vnd.google-apps.folder",
}
显示您正在创建一个文件夹并为其指定 mime 类型的文件夹。您没有设置目录,因此它将进入当前经过身份验证的用户的根目录。
当您使用服务帐户时
creds = service_account.Credentials.from_service_account_file(SERVICE_ACCOUNT_FILE, scopes=SCOPES)
该文件将上传到服务帐户谷歌驱动器帐户。
您可以通过执行 files.list 来看到这一点
folder = service.files().list().execute()
如果您想将文件上传到您的个人云端硬盘帐户,您需要与服务帐户共享一个文件夹,然后将元数据中的父级设置为您帐户上上传到的文件夹的父级。