如何在python中使用请求上传多个文件

  介绍

今天就跟大家聊聊有关如何在python中使用请求上传多个文件,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

<强> 1,需要的环境

Python2。请求库X

<强> 2,单字段发送单个文件

在请求中发送文件的接口只有一种,那就是使用请求。发布的文件参数,请求形式如下:

url =,“http://httpbin.org/post",,   时间=data  None    files =, {,,,},   r =, requests.post (url,数据,文件=文件)

而这个文件参数是可以接受很多种形式的数据,最基本的2种形式为:

字典类型

元组列表类型

<强> 2.1,字典类型的文件参数

官方推荐使用的字典参数格式如下:

{,   ,“field1":, (“filename1",,开放(“filePath2",,“rb")),,   ,“field2":, (“filename2",,开放(“filePath3",,“rb"),,“图像/jpeg"),,   ,“field3":, (“filename3",,开放(“filePath4",,“rb"),,“图像/jpeg",, {“refer",:,“localhost"}),   }

这个字典的关键就是发送帖子请求时的字段名,而字典的价值则描述了准备发送的文件的信息;从上面可以看出价值可以是2元组,3元组或4元组;

这个元组的每一个字段代表的意思一次为:

(“filename",,“fileobject",,“content-type",,“headers")

缺省的话则会使用默认值

除了上面的使用形式,其实请求还是支持一个更简洁的参数形式,如下

{,   ,“field1":,开放(“filePath2",,“rb")),   ,“field2":,开放(“filePath3",,“rb")),   ,“field3":,开放(“filePath4",,“rb")),   }

这种形式的参数其等同效果如下,其中文件名是filepath的文件名:

{,   ,“field1":, (“filename1",,开放(“filePath2",,“rb")),,   ,“field2":, (“filename2",,开放(“filePath3",,“rb")),,   ,“field3":, (“filename3",,开放(“filePath4",,“rb")),   }

当然,你还可以这样发送一个文件请求

{,   ,“field1":,开放(“filePath2",,“rb") .read ()),   }

这里的文件名的值为field1

<强> 2.2,元组列表类型的文件参数

其实元组列表的形式与字典的形式基本一样,除了最外层的包装不一样;而在请求内部最终会把字典参数形式转换为元组列的形式。官网推荐的用法如下:

(,   ,(“field1",:, (“filename1",,开放(“filePath2",,“rb"))),,   ,(“field2",:, (“filename2",,开放(“filePath3",,“rb"),,“图像/jpeg")),,   ,(“field3",:, (“filename3",,开放(“filePath4",,“rb"),,“图像/jpeg",, {“refer",:,“localhost"})),   )

列表里面的子项可以是元组,也可以是列表;同样这里也支持简介的形式,如下:

(,   ,(“field1",:,开放(“filePath2",,“rb"))), # # filename 使用的是filepath的文件名,   ,(“field2",:,开放(“filePath3",,“rb") .read ())), # # filename 使用的是键值,即,field2    )

<强> 3,单字段发送多个文件【即上传文件时,设置为多选了】

<强> 3.1,字典参数形式

{,   ,“field1",:,“,   ,,(“filename1",,开放(“filePath2",,“rb")),,   ,,(“filename2",,开放(“filePath3",,“rb"),,“图像/png"),,   ,才能打开(“filePath4",,“rb"),,   ,才能打开(“filePath5",,“rb") .read (),   ),才能   }

<强> 3.2,元组列表形式

(,   ,(“field1",,, (“filename1",,开放(“filePath2",,“rb"))),,   ,(“field1",,, (“filename2",,开放(“filePath3",,“rb"),,“图像/png")),,   ,(“field1",,,开放(“filePath4",,“rb")),,   ,(“field1",,,开放(“filePath5",,“rb") .read ()),   )

上面2种形式发送的请求,所有的文件都会在同一个字段下,后台服务只要从field1字段就可以获取全部的文件对象

<强> 4,同时发送普通数据字段

上面介绍的是使用发送文件内容请求,而有时候我们在发送文件的同时还需要发送普通的数据字段,此时普通数据字段直接存在数据参数中即可,如下:

data =, {“k1",:,“v1"},=,{files    ,“field1":,开放(“1. png",,“rb"),   },   null

如何在python中使用请求上传多个文件