![](/img/trans.png)
[英]Python Google Drive API, uploading data in memory rather then file on disk?
[英]Google Drive API "Post" Method, uploading an image file with meta data, Python
我正在尝试在 Python 中上传包含元数据的图像文件。
我知道有一个非常方便的 Python API,但我想使用“Post”方法以便我可以使用“aiohttp”。
看了官方文档后,我编码如下,报400错误。
它出了什么问题?
import requests
import json
import sys
with open('storage.json', 'r') as file:
token = json.load(file)
token = token["access_token"]
url = 'https://www.googleapis.com/upload/drive/v3/files'
file_metadata = {
'Content-Type': 'application/json; charset=UTF-8',
'name': 'test.jpg',
'parents': [],
'mimeType': None
}
media = {
'Content-Type': 'image/jpeg',
'file': open('test2.jpg', 'rb'),
}
data = {
'MetaData': file_metadata,
'Media': media,
}
headers = {
'Authorization': 'Bearer {}'.format(token),
'Content-Type': 'multipart/related',
'Content-Length': str(sys.getsizeof(data)),
}
params = {
'uploadType': 'multipart'
}
res = requests.post(url, data=data, params=params, headers=headers)
print(res)
在你的脚本中,如何进行以下修改?
import requests
import json
with open('storage.json', 'r') as file:
token = json.load(file)
token = token["access_token"]
url = "https://www.googleapis.com/upload/drive/v3/files"
file_metadata = {"name": "test.jpg"}
data = {
"MetaData": (
"metadata",
json.dumps(file_metadata),
"application/json; charset=UTF-8",
),
"Media": open("test2.jpg", "rb"),
}
headers = { "Authorization": "Bearer {}".format(token) }
params = {"uploadType": "multipart"}
res = requests.post(url, files=data, params=params, headers=headers)
print(res.text)
运行此脚本时,将返回以下结果。
{
"kind": "drive#file",
"id": "###",
"name": "test.jpg",
"mimeType": "image/jpeg"
}
在这种情况下,文件将上传到根文件夹。 当您想将文件放入特定文件夹时,请在 file_metadata 中添加 'parents': ['### file_metadata
'parents': ['###folderId###']
。
我认为,您即将到达目的地,只需将 data 参数更改为 json 意味着使用json = data
而不是data = data
import requests
import json
import sys
with open('storage.json', 'r') as file:
token = json.load(file)
token = token["access_token"]
url = 'https://www.googleapis.com/upload/drive/v3/files'
file_metadata = {
'Content-Type': 'application/json; charset=UTF-8',
'name': 'test.jpg',
'parents': [],
'mimeType': None
}
media = {
'Content-Type': 'image/jpeg',
'file': open('test2.jpg', 'rb'),
}
data = {
'MetaData': file_metadata,
'Media': media,
}
headers = {
'Authorization': 'Bearer {}'.format(token),
'Content-Type': 'multipart/related',
'Content-Length': str(sys.getsizeof(data)),
}
params = {
'uploadType': 'multipart'
}
res = requests.post(url, json=data, params=params, headers=headers)
print(res)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.