實際項目案例:如何處理需要上傳文件的類型接口?


一、接口分析

  這里直接在前端進行上傳,通過Chrome瀏覽器的F12開發工具進行抓包,可以看到上傳文件接口的請求與相應信息,因為是公司的項目接口,會做一些馬賽克處理:

再看看請求參數:

我們可以從請求中看到,請求方式為multipart/form-data表單格式,並且注意到,雖然上傳了文件,但是請求參數中並沒有展示文件路徑和文件名,而且fileList值為“binary”,那么可以知道上傳的為文件的字節內容

二、postman示例

  以postman示例,body選擇form-data選項,key填入fileList[]並選擇格式為file,在value中選擇一個本地文件進行上傳,然后發起請求:

結果接口請求成功~

三、requests示例

剛剛我們借助工具實現了上傳文件的請求,postman中可以將我們的請求轉化為python代碼格式,具體步驟如下:

1.先使用postman構建好參數並調試成功

2.點擊Save按鈕下方的Code

3.選擇語言為Python - Requests后復制代碼

4.將復制后的代碼粘貼到Pycharm或者VS code的開發工具中運行即可

import os
import requests

from Commons.constants import UPLOAD_DIR

url = "https://接口地址/1.0/product/style-gallery"

payload = {}
files = [
    ('fileList[]', open(os.path.join(UPLOAD_DIR, 'stylegallery.png'), 'rb'))
]
headers = {}

response = requests.request("POST", url, headers=headers, data=payload, files=files)

print(response.text.encode('utf8'))

至此就完成了文件上傳接口的處理,后續進行測試或者接口自動化在此基礎上進行二次開發即可~

四、方法二

  如果上面的方式並不能解決問題,那么再采用第二種方法,基本就不會有問題。

  我們先來看看上傳文件的請求內容:

接下來,給requests庫的請求參數files的值套用以下模板:

files = {
            '${name}': ('${filename}', open( '${filepath}', 'rb'), '${Content-Type}')
        }
  • ${name}:即name的值"fileList[0]"
  • ${filename}:即filename的值"a.jpg"
  • ${filepath}:filename的文件路徑
  • ${Content-Type}:即Content-Type的值"image/jpeg"

將模板對應的變量替換為實際值,得到:

files = {
            'fileList[0]': ('a.jpg', open(os.path.join(UPLOAD_DIR, 'a.jpg'), 'rb'), 'image/jpeg')
        }

注意要確認文件路徑是否正確,我這里使用了相對路徑,然后將files傳遞給requests的對應方法上即可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM