
本文旨在解决使用 google drive api 通过服务账户上传文件时,文件未显示在预期个人云盘中的常见问题。核心在于理解服务账户拥有独立的 drive 空间,而非直接访问个人云盘。解决方案涉及将个人云盘中的目标文件夹共享给服务账户,并正确配置 parents 字段,从而实现文件精准上传至指定位置。
在使用 Google Drive API 进行文件操作,尤其是通过服务账户进行上传时,开发者常会遇到一个困惑:代码执行成功,但文件却未出现在预期的个人 Google Drive 文件夹中。这通常并非代码逻辑错误,而是对 Google Drive 服务账户工作原理的误解所致。本教程将深入探讨这一问题,并提供清晰的解决方案。
Google Drive API 中的服务账户(Service Account)是一种特殊的账户类型,它代表应用程序而非最终用户进行操作。每个服务账户都拥有一个独立的 Google Drive 空间,这个空间与您的个人 Google Drive 账户是完全隔离的。当您使用服务账户上传文件时,如果未指定目标文件夹,文件默认会被上传到该服务账户自己的 Drive 根目录中,而不是您的个人 Drive 根目录。
这就是为什么即使上传操作看似成功,您也无法在个人 Drive 中找到文件——它们实际上存在于服务账户的 Drive 空间中。
要将文件上传到您的个人 Google Drive 中的特定文件夹,您需要执行以下两个关键步骤:
获取了服务账户邮箱和目标文件夹 ID 后,您就可以修改 Python 代码了。关键在于在 file_metadata 中添加 parents 字段,并将其值设置为一个包含目标文件夹 ID 的列表。
以下是修正后的示例代码:
from __future__ import print_function
import os
from google.oauth2 import service_account
from googleapiclient.discovery import build
from googleapiclient.http import MediaFileUpload
# 配置认证信息
SCOPES = ['https://www.googleapis.com/auth/drive.file']
# 请替换为您的服务账户密钥文件路径
SERVICE_ACCOUNT_FILE = 'C:\Users\danie\OneDrive\Documentos\PAP\teste drive\iris-face-models-565de449aa27.json'
# 创建凭据对象
credentials = service_account.Credentials.from_service_account_file(
SERVICE_ACCOUNT_FILE, scopes=SCOPES
)
# 构建 Drive API 服务
drive_service = build('drive', 'v3', credentials=credentials)
# 请替换为您的目标文件夹ID
# 这个文件夹必须已经共享给上述服务账户的邮箱地址
target_folder_id = '1MAM4CPDMbqpzP5rZb1Zw0A15r4U7B4Kv'
# 定义文件元数据
file_metadata = {
'name': 'test_file.txt',
'parents': [target_folder_id] # 关键:指定目标文件夹ID
}
# 准备要上传的本地文件
# 请替换为您的本地文件路径
local_file_path = 'C:\Users\danie\OneDrive\Documentos\PAP\testeicheiro\Ficheiro_teste.txt'
media = MediaFileUpload(local_file_path, mimetype='text/plain')
# 执行文件上传
try:
file = drive_service.files().create(
body=file_metadata,
media_body=media,
fields='id,name,parents' # 请求返回文件ID、名称和父文件夹信息,以便验证
).execute()
print(f"文件 '{file.get('name')}' (ID: {file.get('id')}) 已成功上传。")
if file.get('parents'):
print(f"上传至文件夹 ID: {file.get('parents')[0]}")
else:
print("文件上传至服务账户的根目录。")
except Exception as e:
print(f"文件上传失败: {e}")
通过理解 Google Drive 服务账户的隔离性,并采取将目标文件夹共享给服务账户、以及在代码中正确配置 parents 字段的策略,您可以成功地将文件上传到个人 Google Drive 中的指定位置。这一解决方案不仅解决了文件“消失”的困境,也加深了对 Google Drive API 认证和权限机制的理解,为构建更健壮的云存储集成应用奠定了基础。
以上就是Google Drive API 服务账户文件上传指南:解决文件不显示问题的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号