使用python的requests库向strapi上传文件

requests库在处理multipart/form-data上传时有好几个“便利地”陷阱。看似通过如下的方式调用post是最方便的:

files = {"key", "value"}
requests.post('url_to_server', files = files, ...)

但实则,这样调用post的api陷阱重重。

首先,通过这样的形式上传文件时,没法指定数据的mime类型。例如:

files = {"name": open("path_to_file", "rb")} #这样无法指定数据的content-type

应该这样files = {"name": ("filename", open("path_to_file", "rb", "multipart/form-data"))}

然而,这样写仍然无法解决同一个名称,多个文件的特殊情况。更强大的方式是这样:
files = [
("name",("filename", open("path_to_file", "rb"), "application/octet-stream")), ("name", ("filename",open("path_to_file2"), "rb", "text/plain"))]

这里,两个元素的name可以相等。

那么还有更普遍的情况,上述样本中,filename所在参数还可以为None。这样可以消掉filename的属性(用在非文件数据上传的情况)。

files = [
("name1": (None, "my_value")),
("name2": ("filename", open("path_to_file", "rb"), "multipart/form-data"))]

发表评论

邮箱地址不会被公开。 必填项已用*标注