如何使用 Google Drive API 和 Python 将文件上传到特定文件夹?

tam*_*mmi 2 python google-api google-drive-api

我正在将 jpg 文件上传到我的 Google Drive 帐户。它工作正常,但我需要将其上传到特定文件夹,但不确定如何在元数据中设置父参数。

这是我的代码:

data = {"file": open(filedirectory, 'rb').read(), "title" : filename, "parents" : [{"id": "<folderid>"}]}
drive_url = "https://www.googleapis.com/upload/drive/v3/files?uploadType=media"
drive_r = requests.post(drive_url, data=data, headers={"Authorization": "Bearer " + access_token, "Content-type": "image/jpeg"})
Run Code Online (Sandbox Code Playgroud)

Tan*_*ike 6

我相信你的目标如下。

  • 您想将文件上传到 Google Drive 中的特定文件夹。
  • 您想使用requestspython来实现这一点。

改装要点:

  • 在的情况下uploadType=media,官方文档是这样说的。

    简单上传(uploadType=media)。使用此上传类型可在不提供元数据的情况下快速传输小型媒体文件(5 MB 或更少)。要执行简单上传,请参阅执行简单上传。

  • 因此,为了上传文件内容和文件元数据,请使用uploadType=multipart.

  • 而且,在您的端点中,使用了 Drive API v3。但"parents" : [{"id": "<folderid>"}]适用于 Drive API v2。还需要对其进行修改。

当你的脚本被修改为 时uploadType=multipart,它变成如下。

修改后的脚本:

使用本脚本时,请设置filedirectory, filename, folderid, access_token.

import json
import requests

filedirectory = '###'
filename = '###'
folderid = '###'
access_token = '###'

metadata = {
    "name": filename,
    "parents": [folderid]
}
files = {
    'data': ('metadata', json.dumps(metadata), 'application/json'),
    'file': open(filedirectory, "rb").read()  # or  open(filedirectory, "rb")
}
r = requests.post(
    "https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart",
    headers={"Authorization": "Bearer " + access_token},
    files=files
)
print(r.text)
Run Code Online (Sandbox Code Playgroud)

笔记:

  • 此修改后的脚本假设您的访问令牌可用于将文件上传到 Google Drive。

参考: