使用Python上传图片至Google Drive成功后无法找到文件的问题
Google Drive上传成功但文件无法在个人账号中找到
问题描述
使用Python脚本上传图片至Google Drive,控制台输出提示:Image with ID '1ZWfY4n473bD58RpqSX-HBeb8H6pa63bc' was uploaded to the folder with ID 'your_folder_id' on Google Drive,但登录个人Google Drive账号后找不到任何相关文件。
原代码示例
认证设置
creds = None SCOPES = ['https://www.googleapis.com/auth/drive.file'] creds = service_account.Credentials.from_service_account_file( 'agricultureproject.json', scopes=SCOPES)
上传图片函数
def upload_image_to_drive(image_url, folder_id): try: # Create a Drive API client service = build('drive', 'v3', credentials=creds) file_metadata = {'name': 'IdentityDiagram.PNG'} media = MediaFileUpload('IdentityDiagramPNG.PNG', mimetype='image/jpeg') # Upload the image to Google Drive file = service.files().create(body=file_metadata, media_body=media, fields='id').execute() print(f"Image with ID '{file.get('id')}' was uploaded to the folder with ID '{folder_id}' on Google Drive") except HttpError as error: print(f"An error occurred: {error}") file = None return file
函数调用
folder_id = 'your_folder_id' image_url = 'https://i5.walmartimages.com/asr/9e391b9c-462a-4ca6-8832-5e56159f999d_1.aedccea75551f143d7ab991716ec8e05.jpeg' upload_image_to_drive(image_url, folder_id)
问题根源及解决方案
1. 服务账号的独立存储空间
服务账号(Service Account)拥有独立的Google Drive空间,和你的个人Google账号不共享。你上传的文件实际存在服务账号的Drive中,而非个人账号,因此直接登录个人账号看不到文件。
解决方法:
- 打开
agricultureproject.json,找到client_email字段(格式类似xxx@xxx.iam.gserviceaccount.com)。 - 在个人Google Drive中找到目标文件夹,右键选择「共享」,将上述邮箱添加为协作者(赋予编辑权限)。
2. 未指定文件的父文件夹
原代码的file_metadata未添加parents字段,导致文件上传到服务账号的根目录,而非你指定的folder_id文件夹。即使共享了文件夹,文件也不会自动归入其中。
修正代码:
在file_metadata中添加父文件夹指定:
file_metadata = { 'name': 'IdentityDiagram.PNG', 'parents': [folder_id] # 关联到目标文件夹 }
3. 传入的图片URL未被使用
函数参数image_url未在代码中处理,当前上传的是本地文件IdentityDiagramPNG.PNG,而非传入的在线图片。若需上传URL对应的图片,需先下载到本地:
添加下载逻辑:
import requests def upload_image_to_drive(image_url, folder_id): try: # 下载在线图片到本地 img_response = requests.get(image_url) local_filename = 'temp_image.PNG' with open(local_filename, 'wb') as f: f.write(img_response.content) service = build('drive', 'v3', credentials=creds) file_metadata = { 'name': 'IdentityDiagram.PNG', 'parents': [folder_id] } # 修正MIME类型:PNG对应image/png media = MediaFileUpload(local_filename, mimetype='image/png') file = service.files().create(body=file_metadata, media_body=media, fields='id').execute() print(f"Image with ID '{file.get('id')}' was uploaded to the folder with ID '{folder_id}' on Google Drive") except HttpError as error: print(f"An error occurred: {error}") file = None except Exception as e: print(f"Download error: {e}") file = None return file
4. MIME类型不匹配
原代码中上传的是PNG文件,但mimetype设置为image/jpeg,可能导致文件识别异常,需修正为image/png。
完整工作流程
- 共享目标文件夹给服务账号邮箱。
- 使用修正后的代码(包含文件夹指定、URL下载、MIME类型修正)。
- 运行脚本后,个人Google Drive的目标文件夹中即可看到上传的图片。
内容的提问来源于stack exchange,提问作者Ahmed Mohamed
相关产品推荐
相关产品推荐

