繁体   English   中英

Google Drive API “Post”方法,上传带有元数据的图像文件,Python

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM