如何使用 python 请求上传和删除 google 驱动器 API 的文件
How to upload and delete files with google drive API using python requests
我正在尝试使用请求将图像上传到 google 驱动器,但它不起作用,因为请求一直给我状态 401(错误的凭据)。我正在使用提供给我的访问令牌,所以我不知道发生了什么。
这是我的代码:
tokendrive = "ya29.A0AfH6SMDn1ti-5u8gjLQhHf3ffILkR2_8mSRBoap7hY8ZuIGoFomPhZJAi_hVgORZkBJtBeTDhlPnOeksNZvwrUPgBcuHle5BMqULMBY7Y97fIaMGuOqSAQIrSyXnqLbtDLEwrnCAXfHHSVxtWAbX80pHkarG"
url = "https://www.reddit.com/r/LiminalSpace/comments/lwoipa/i_guess_nobody_woke_me_up/"
myid = "1QoepljKHkjSarx0kCcwEnHjRA5fBP4sU"
subid = lwoipa
r = requests.get(url)
headers = {'Authorization': 'Bearer ' + tokendrive}
para = {"name": submission.id + ".png",
"parents": [myid]}
files = {"data": ("metadata", json.dumps(para), "application/json; charset=UTF-8"),
"file": io.BytesIO(requests.get(url).content)}
response = requests.post("https://www.googleapis.com/upload/drive/v3/files",headers=headers,files=files)
print(response.text)
我认为您的目标和现状如下。
- 您想将文件上传到 Google 驱动器。
- 您想删除 Google 驱动器上的文件。
- 您想使用 python 的
request
模块来实现此目的。
- 从您的端点,您想使用 Drive API v3.
- 您的访问令牌可用于使用云端硬盘上传和删除文件 API。
修改点:
- 如果您的访问令牌可用于将文件上传到 Google 驱动器,则需要修改脚本以使用访问令牌。在这种情况下,请将
Token
修改为Bearer
。我认为你的错误原因可能是由于这个。
- 使用Drive API v3时,
parents
的属性为"parents": [myid]
。并且在当前阶段,请在此处使用一个文件夹ID。
- 对于 Drive API v3,文件名可以用
name
代替 title
。 title
用于 Drive API v2.
当以上几点反映到你的脚本中,就会变成下面这样。
修改后的脚本:
此修改后的脚本将文件上传到 Google 驱动器。在使用此脚本之前,请再次确认您要使用的变量。
headers = {'Authorization': f'Bearer {tokendrive}'} # or 'Bearer ' + tokendrive
para = {
"name": "image_url.jpg",
"parents": [myid]
}
files = {
"data": ("metadata", json.dumps(para), "application/json; charset=UTF-8"),
"file": io.BytesIO(requests.get(submission.url).content)
}
response = requests.post(
"https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart",
headers=headers,
files=files
)
print(response.text)
在此脚本中,返回以下值。
{
"kind": "drive#file",
"id": "###",
"name": "image_url.jpg",
"mimeType": "image/jpeg"
}
在此修改后的脚本中,上传的最大文件大小为 5 MB。当您想上传超过 5 MB 的文件时,请使用断点续传。在那种情况下,我认为这个线程可能会有用。
示例脚本:
此示例脚本删除 Google 驱动器上的一个文件。
fileId = '###' # Please set the file ID you want to delete.
headers = {'Authorization': f'Bearer {tokendrive}'} # or 'Bearer ' + tokendrive
response = requests.delete(
"https://www.googleapis.com/drive/v3/files/" + fileId,
headers=headers,
)
print(response.text)
在这种情况下,没有返回值。这是当前规格。
重要提示:此脚本会完全删除 fileId
的文件。所以请注意这一点。我想推荐使用示例文件进行测试。
参考文献:
我正在尝试使用请求将图像上传到 google 驱动器,但它不起作用,因为请求一直给我状态 401(错误的凭据)。我正在使用提供给我的访问令牌,所以我不知道发生了什么。
这是我的代码:
tokendrive = "ya29.A0AfH6SMDn1ti-5u8gjLQhHf3ffILkR2_8mSRBoap7hY8ZuIGoFomPhZJAi_hVgORZkBJtBeTDhlPnOeksNZvwrUPgBcuHle5BMqULMBY7Y97fIaMGuOqSAQIrSyXnqLbtDLEwrnCAXfHHSVxtWAbX80pHkarG"
url = "https://www.reddit.com/r/LiminalSpace/comments/lwoipa/i_guess_nobody_woke_me_up/"
myid = "1QoepljKHkjSarx0kCcwEnHjRA5fBP4sU"
subid = lwoipa
r = requests.get(url)
headers = {'Authorization': 'Bearer ' + tokendrive}
para = {"name": submission.id + ".png",
"parents": [myid]}
files = {"data": ("metadata", json.dumps(para), "application/json; charset=UTF-8"),
"file": io.BytesIO(requests.get(url).content)}
response = requests.post("https://www.googleapis.com/upload/drive/v3/files",headers=headers,files=files)
print(response.text)
我认为您的目标和现状如下。
- 您想将文件上传到 Google 驱动器。
- 您想删除 Google 驱动器上的文件。
- 您想使用 python 的
request
模块来实现此目的。 - 从您的端点,您想使用 Drive API v3.
- 您的访问令牌可用于使用云端硬盘上传和删除文件 API。
修改点:
- 如果您的访问令牌可用于将文件上传到 Google 驱动器,则需要修改脚本以使用访问令牌。在这种情况下,请将
Token
修改为Bearer
。我认为你的错误原因可能是由于这个。 - 使用Drive API v3时,
parents
的属性为"parents": [myid]
。并且在当前阶段,请在此处使用一个文件夹ID。 - 对于 Drive API v3,文件名可以用
name
代替title
。title
用于 Drive API v2.
当以上几点反映到你的脚本中,就会变成下面这样。
修改后的脚本:
此修改后的脚本将文件上传到 Google 驱动器。在使用此脚本之前,请再次确认您要使用的变量。
headers = {'Authorization': f'Bearer {tokendrive}'} # or 'Bearer ' + tokendrive
para = {
"name": "image_url.jpg",
"parents": [myid]
}
files = {
"data": ("metadata", json.dumps(para), "application/json; charset=UTF-8"),
"file": io.BytesIO(requests.get(submission.url).content)
}
response = requests.post(
"https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart",
headers=headers,
files=files
)
print(response.text)
在此脚本中,返回以下值。
{ "kind": "drive#file", "id": "###", "name": "image_url.jpg", "mimeType": "image/jpeg" }
在此修改后的脚本中,上传的最大文件大小为 5 MB。当您想上传超过 5 MB 的文件时,请使用断点续传。在那种情况下,我认为这个线程可能会有用。
示例脚本:
此示例脚本删除 Google 驱动器上的一个文件。
fileId = '###' # Please set the file ID you want to delete.
headers = {'Authorization': f'Bearer {tokendrive}'} # or 'Bearer ' + tokendrive
response = requests.delete(
"https://www.googleapis.com/drive/v3/files/" + fileId,
headers=headers,
)
print(response.text)
在这种情况下,没有返回值。这是当前规格。
重要提示:此脚本会完全删除
fileId
的文件。所以请注意这一点。我想推荐使用示例文件进行测试。