日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python模拟实现multipart/form-data格式上传图片文件

發(fā)布時間:2025/3/15 python 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python模拟实现multipart/form-data格式上传图片文件 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?

一、單字段發(fā)送單個文件

url = "http://httpbin.org/post"
data = None
files = { ... }
r = requests.post(url, data, files=files)

而這個files參數(shù)是可以接受很多種形式的數(shù)據(jù),最基本的2種形式為字典類型和元祖列表類型

1、字典類型的files參數(shù)

{
? "field1" : ("filename1", open("filePath1", "rb")),
? "field2" : ("filename2", open("filePath2", "rb"), "image/jpeg"),
? "field3" : ("filename3", open("filePath3", "rb"), "image/jpeg", {"refer" : "localhost"})
}

這個字典的key就是發(fā)送post請求時的字段名, 而字典的value則描述了準備發(fā)送的文件的信息;從上面可以看出value可以是2元組,3元組或4元組

?

缺省的話則會使用默認值。除了上面的使用形式,其實requests還是支持一個更簡潔的參數(shù)形式,如下

{

"field1" : open("filePath1", "rb"),

"field2" : open("filePath2", "rb"),

"field3" : open("filePath3", "rb")

}


{
? "field1" : ("filename1", open("filePath1", "rb")),
? "field2" : ("filename2", open("filePath2", "rb")),
? "field3" : ("filename3", open("filePath3", "rb"))

}

2、元祖列表類型的files參數(shù)

其實元組列表的形式與字典的形式基本一樣,除了最外層的包裝不一樣;而在requests內(nèi)部最終會把字典參數(shù)形式 轉(zhuǎn)換 為 元組列的形式。官網(wǎng)推薦的用法如下:

[
? ("field1" : ("filename1", open("filePath1", "rb"))),
? ["field2" : ("filename2", open("filePath2", "rb"), "image/jpeg")],
? ("field3" : ("filename3", open("filePath3", "rb"), "image/jpeg", {"refer" : "localhost"}))
]
列表里面的子項可以是元組,也可以是列表;同樣這里也支持簡介的形式,如下:

[
? ("field1" : open("filePath1", "rb"))), ?##filename 使用的是filepath的文件名
? ("field2" : open("filePath2", "rb").read())) ##filename 使用的是鍵值,即 field2
]


二、單字段發(fā)送多個文件,即上傳文件時,設(shè)置為多選了

2.1、字典參數(shù)形式

{
? "field1" : [
? ? ? ? ? ? ? ? ?("filename1", open("filePath1", "rb")),?
? ? ? ? ? ? ? ? ?("filename2", open("filePath2", "rb"), "image/png"),?
? ? ? ? ? ? ? ? ?open("filePath3", "rb"),
? ? ? ? ? ? ? ? ?open("filePath4", "rb").read()
? ? ? ? ? ? ? ?]
}

2.2、元組列表形式

[
? ("field1" , ("filename1", open("filePath1", "rb"))),
? ("field1" , ("filename2", open("filePath2", "rb"), "image/png")),?
? ("field1" , open("filePath3", "rb")),
? ("field1" , open("filePath4", "rb").read())
]
?

?

?

三、上傳單張圖片實例:

3.1、用fiddler抓包,查看接口請求格式和圖片傳參格式:

Content-Type:multipart/form-data

Content-Type: image/png
Content-Disposition: form-data; name="file"; filename="file.png"

3.2、上傳圖片

url='XXXXXXXXXXXXXX/1.0/bd/user/punch_clock'
files={"file": ("1.png", open(r"C:\Users\wangli\PycharmProjects\InterfaceAutomationTesting\case\1.png", "rb"), "image/png")}
headers={"Authorization":"bearereyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC9vbnNpdGUtYXBpLnN0MS50ZXN0LmxhbnhpbmthLmNvbVwvMS4wXC9hZG1pblwvbWFuYWdlclwvbG9naW4iLCJpYXQiOjE1NTkxMjkzNjIsImV4cCI6MTU2MTgwNzc2MiwibmJmIjoxNTU5MTI5MzYyLCJqdGkiOiI4Y0VweGdnVDc3NjFwRkxnIiwic3ViIjoyMzUsInBydiI6IjA1NzdiNDFmNTRlMDk1YTNkOGNhMjM3NDM2NTAxYjhiN2IxZmU0YTQifQ.RUeRExypNq2sWY7CCOwH60xBEDgvRMytYKxEE2Ze35k"}
r=requests.post(url=url,headers=headers,files=files)
print(r.json())

?

四、上傳圖片實例:

4.1.上傳圖片以下這種格式:
-----------------------------22165374713946
Content-Disposition: form-data; name="localUrl"

yoyoketang.png
-----------------------------22165374713946
Content-Disposition: form-data; name="imgFile"; filename="yoyoketang.png"
Content-Type: image/png

2.寫成字典格式,key對應(yīng)name="imgFile"這里name對應(yīng)的值

3.value里面是一個元組()

  • 第一個參數(shù)是filename=后面對應(yīng)的值,沒有就寫None
  • 第二個是上面的這個值“”yoyoketang.png“”,或者是文件open打開的二進制流
  • 第三個是Content-Type對應(yīng)的類型,如:"image/png"

f ={
"localUrl": (None,"1.png"),
"imgFile": ("1.png", open("d:\1.png", "rb"), "image/png")
}

# 上傳圖片

url1 = "http://127.0.0.1:81/zentao/file-ajaxUpload-5a26aca290b59.html?dir=image"

f ={ "localUrl": (None,"1.png"), "imgFile": ("1.png", open("d:\\1.png", "rb"), "image/png") }

r = s.post(url1, files=f)

?

五、上傳圖片實例:

url='http://ta.2boss.cn/rabbit/v1/user/addAdvise'
data={"advise":"測試上傳圖片","customerId":"47066750",
"images":["http:\/\/2boss.oss-cn-hangzhou.aliyuncs.com\/54a0e078e4f4588d4a6efdfafa8cc621.jpg",
????????? "http:\/\/2boss.oss-cn-hangzhou.aliyuncs.com\/82f7ad533662ca918f75035b8bc063f6.jpg"]}
headers={"TBSAccessToken":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJjbGllbnRJZCI6ImY3NDA4MWUzLTVhYzgtNDRkNS05NWFlLWM1OGM0ZmRhOWEyNCIsInNjb3BlIjoiQ09OU1VNRVIiLCJpc3MiOiJodHRwOi8vbGl5b3UuY28iLCJleHAiOjE1NjE3Nzg0MjcsInVzZXJJZCI6OTUxNTMsImV4cGlyZXNBdCI6MTU2MTc3ODQyNzcyNX0.4ZKIhwgQTTqxabsLs9_wX5r-dkaULgqfA2ENhkSnZPo"}

r=requests.post(url=url,headers=headers,json=data)
print(r.json())

?

六、傳多個附件

1.傳多個文件的時候如下,這兩個參數(shù)的name都是一樣的,如果用字典去傳key值,很顯然python的key值是不能重復(fù)的

Content-Disposition: form-data; name="files[]"; filename="1.png"

Content-Type: image/png

Content-Disposition: form-data; name="files[]"; filename="2.png"

Content-Type: image/png

2.這時候需要換個格式,傳list數(shù)據(jù)

# file = {

# "files[]": ("1.png", open("d:\\1.png", "rb"), "image/png"),

# "labels[]": "tu1",

# }

#-------------多個文件用list類型------------

file = [

("files[]", ("2.png", open("d:\\1.png", "rb"), "image/png")),

("labels[]", "tu1"),

("files[]", ("2.png", open("d:\\2.png", "rb"), "image/png")),

("labels[]", "tu2"),

]

總結(jié)

以上是生活随笔為你收集整理的Python模拟实现multipart/form-data格式上传图片文件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。