You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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。

完整工作流程

  1. 共享目标文件夹给服务账号邮箱。
  2. 使用修正后的代码(包含文件夹指定、URL下载、MIME类型修正)。
  3. 运行脚本后,个人Google Drive的目标文件夹中即可看到上传的图片。

内容的提问来源于stack exchange,提问作者Ahmed Mohamed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 05:15:38