上傳檔案介面除錯

2022-01-11 10:46:44 字數 3389 閱讀 3248

最近在寫指令碼時有乙個功能是上傳附件,也趁這個機會學習了下對於上傳檔案類的介面該如何進行傳參

本次介紹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 = '

'>>> files = )}

>>> r = requests.post(url, files=files)

>>>r.text

, ...

}

通過這個例子,可以知道requests上傳檔案是通過files關鍵字來完成的:先定義乙個變數files,它是乙個字典,key=file,value則是開啟的二進位制檔案;然後傳送post請求時,帶上file引數即可

拿我這次的請求來說,如下

files = 

payload=

response = requests.post(url, files=files, data=payload, headers=headers)

payload中定義的是請求body中的type引數;files是本次要上傳的檔案;

傳送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...