最近在寫指令碼時有乙個功能是上傳附件,也趁這個機會學習了下對於上傳檔案類的介面該如何進行傳參
本次介紹2種方式來上傳附件:一種是通過jmeter;另一種是通過python的requests庫
在講具體方法之前,先來分析下這次上傳附件介面的headers與攜帶的引數資訊
headers種主要看content-type,這個請求中的content-type如下
content-type: multipart/form-data; boundary=----webkitformboundaryktd3qxhwcr9s9wdy
查了一些資料,大概意思是說:資料以multipart/form-data編碼,boundary用於分割不同的字段
繼續看下引數是如何的,可能就理解上面說的boundary用於分割欄位是什麼意思了,chrome控制台下顯示的引數資訊如下
可以看到訊息主體裡按照字段個數又分為多個結構類似的部分,每部分都是以--boundary
開始,緊接著是內容描述資訊,然後是回車,最後是字段具體內容(文字或二進位制);
如果傳輸的是檔案,還要包含檔名和檔案型別資訊;
訊息主體最後以--boundary--
標示結束;
另外boundary每次都是隨機生成的!!!
以我這個請求為例,來說明一下如何填寫請求引數,先把請求body再次放在在這裡
如果請求body中除了需要上傳檔案外,還需要上傳其他引數,如上面的第一部分,表示有個引數名為"type",它的值為3,需要把它填入jmeter的【引數】中
在【檔案上傳】中填寫附件的引數資訊
(1) 勾選【對post使用multipart/form-data】
(2) 檔名稱:附件絕對路徑
(3) 引數名稱:這個根據你在chrome控制台看到引數名稱來填寫,回頭看上面貼出來的請求body
第二部分就是對上傳檔案的檔名和檔案型別的描述,觀察內容可以發現
name=「file」,所以這裡的引數名稱就填寫「file」(填錯的話,一般會報錯的)
content-type為image/jpeg,所以jmeter中的mime型別就填寫「image/jpeg」
ps.關於headers的一點說明:剛開始的時候,我一直想著在資訊頭管理器中加上固定的 content-type: multipart/form-data; boundary=----webkitformboundaryktd3qxhwcr9s9wdy
但是實際執行指令碼時總是報錯,檢視結果樹中的請求頭,也並不是自己定義的這個boundary,貌似自己生成了乙個boundary
後來把請求頭中的content-type去掉後,再次執行就成功了
綜上,在jmeter中進行檔案上傳的請求指令碼就寫好了
在使用requests上傳檔案時,可以先看看官方文件的一段描述:
requests 使得上傳多部分編碼檔案變得很簡單:
>>> url = '你可以顯式地設定檔名,檔案型別和請求頭:'>>> files =
>>> r = requests.post(url, files=files)
>>>r.text
, ...
}
>>> url = '通過這個例子,可以知道requests上傳檔案是通過files關鍵字來完成的:先定義乙個變數files,它是乙個字典,key=file,value則是開啟的二進位制檔案;然後傳送post請求時,帶上file引數即可'>>> files = )}
>>> r = requests.post(url, files=files)
>>>r.text
, ...
}
拿我這次的請求來說,如下
files =payload中定義的是請求body中的type引數;files是本次要上傳的檔案;payload=
response = requests.post(url, files=files, data=payload, headers=headers)
傳送post請求時,需要用files關鍵字傳送檔案,用data關鍵字傳送payload
執行這段指令碼能夠得到和jmeter同樣的結果
接下來檢視下傳送出的請求攜帶的請求頭是什麼樣的
print(response.request.headers)結果如下 可以發現,python自己給它補全了content-type,並且boundary也是自己生成的一段字元
至於如何自己定義boundary還得再研究研究
介面 web api Swagger 檔案上傳
原文 原文 原文 原文 attributeusage attributetargets.method 取消注釋 c.operationfilter 修改為c.operationfilter 不知道為什麼,先暫時跳過,以後有時間再仔細了解 乙個不是很好的解決方式,但可以解決該問題。以後有時候再找找問題...
Java介面實現檔案上傳
因工作需要,在後台管理頁面加入乙個上傳檔案的模組,雖然介面的 很簡單,但實現期間遇到了一些比較有趣的坑,特記錄下來。檔案上傳 暫且不談,先說說檔案放在伺服器什麼位置比較合適。我首先想到的是兩個地方 nginx的靜態目錄下,放在這個目錄下則不會有什麼影響。只需要在nginx中進行相應的配置即可。可用也...
5 4 註冊介面 檔案上傳
use api reg require routes api reg routes api reg.js let express require express let fs require fs fs改名模組使用 let pathx require path 整合檔案位址 let bcrypt r...