溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Python接口自動(dòng)化之文件上傳/下載接口怎么實(shí)現(xiàn)

發(fā)布時(shí)間:2022-04-06 10:28:48 來(lái)源:億速云 閱讀:584 作者:iii 欄目:開發(fā)技術(shù)

今天小編給大家分享一下Python接口自動(dòng)化之文件上傳/下載接口怎么實(shí)現(xiàn)的相關(guān)知識(shí)點(diǎn),內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識(shí),所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來(lái)了解一下吧。

〇、前言

文件上傳/下載接口與普通接口類似,但是有細(xì)微的區(qū)別。

如果需要發(fā)送文件到服務(wù)器,例如:上傳文檔、圖片、視頻等,就需要發(fā)送二進(jìn)制數(shù)據(jù),上傳文件一般使用的都是 Content-Type: multipart/form-data 數(shù)據(jù)類型,可以發(fā)送文件,也可以發(fā)送相關(guān)的消息體數(shù)據(jù)。

反之,文件下載就是將二進(jìn)制格式的響應(yīng)內(nèi)容存儲(chǔ)到本地,并根據(jù)需要下載的文件的格式來(lái)寫文件名,例如:F:/合同文件.pdf。

一、文件上傳接口

1. 接口文檔

Request URL: /createbyfile

Request Method: POST

Content-Type: multipart/form-data

名稱類型是否必須描述
fileFile文檔文件
titleString文檔名稱
fileTypeString文件類型:doc, docx, txt, pdf, png, gif, jpg, jpeg, tiff, html, rtf, xls, txt

2. 代碼實(shí)現(xiàn)

(1)實(shí)現(xiàn)步驟:

構(gòu)造文件數(shù)據(jù),通過(guò)open函數(shù)以二進(jìn)制方式打開文件

文件上傳接口參數(shù)與普通post請(qǐng)求一樣,需要寫成Key和Value模式,Key為參數(shù)名稱file(也是組件的name屬性),Value為一個(gè)元組(與普通接口不同的地方)

Python接口自動(dòng)化之文件上傳/下載接口怎么實(shí)現(xiàn)

"file": (
    "", # 元組第一個(gè)值為文件名稱,沒(méi)有則取None
    open(r"F:\pdf_file.pdf", "rb"), # 若第一個(gè)值非None,則取文件open打開的二進(jìn)制流,否則直接寫文件路徑,如"F:\pdf_file.pdf"
    "pdf" # 文件類型
)
"file": (
    None,
    "F:\pdf_file.pdf"
)

構(gòu)造其他數(shù)據(jù)

{
    "title": "接口發(fā)起的文檔",
    "fileType": "pdf"
}

發(fā)送請(qǐng)求,將文件數(shù)據(jù)以 files 參數(shù)傳入,其他消息體數(shù)據(jù)通過(guò) data 、json 、 headers 、 cookies 等傳入

req = {
            "url": "127.0.0.1/v2/document/createbyfile",
            "method": "POST",
            "headers": {},
            "files": {"file": ("", open(r"F:\pdf_file.pdf", "rb"), "pdf")},
            "data": {
                "title": "接口發(fā)起的文檔",
                "fileType": "pdf"
            }
        }

(2)完整代碼

base_api.py

import requests
class BaseApi:
    @staticmethod
    def requests_http(req):
        # ** 解包
        result = requests.request(**req)
        return result

api/createbyfile.py

# -*- coding:utf-8 -*-
# 作者:IT小學(xué)生蔡坨坨
# 時(shí)間:2022/3/12 21:04
# 功能:根據(jù)文件類型創(chuàng)建合同文檔
from base_api import BaseApi
class Createbyfile:
    def createbyfile(self):
        req = {
            "url": "127.0.0.1/createbyfile",
            "method": "POST",
            "headers": {},
            "files": {"file": ("", open(r"F:\pdf_file.pdf", "rb"), "pdf")},
            "data": {
                "title": "接口發(fā)起的文檔",
                "fileType": "pdf"
            }
        }
        res = BaseApi().requests_http(req)
        assert res.status_code == 200
        res_json = res.json()
        return res_json["result"]["documentId"]
if __name__ == '__main__':
    Createbyfile().createbyfile()

二、文件下載接口

1. 接口文檔

Request URL:/download

Request Method:GET

名稱類型是否必須描述
contractIdLongIDID
downloadItemsString[]下載可選項(xiàng),NORMAL(正文),ATTACHMENT(附件)
needCompressForOneFileBoolean是,默認(rèn)單文件也壓縮當(dāng)下載的文件僅一份時(shí),是否壓縮

2. 代碼實(shí)現(xiàn)

# -*- coding:utf-8 -*-
# 作者:IT小學(xué)生蔡坨坨
# 時(shí)間:2022/4/5 2:56
# 功能:下載合同
from base_api import BaseApi
class Download:
    def download(self):
        req = {
            "url": "127.0.0.1/download",
            "method": "GET",
            "headers": {},
            "params": {
                "contractId": 2947403075747869536,
                "downloadItems": ["NORMAL"],
                "needCompressForOneFile": False
            },
        }
        res = BaseApi().requests_http(req).content # 注意“.content"獲取返回內(nèi)容
        # with open("F:/response.zip", "wb") as f:
        with open("F:/response.pdf", "wb") as f:
            f.write(res)
        return res
if __name__ == '__main__':
    Download().download()

以上就是“Python接口自動(dòng)化之文件上傳/下載接口怎么實(shí)現(xiàn)”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會(huì)為大家更新不同的知識(shí),如果還想學(xué)習(xí)更多的知識(shí),請(qǐng)關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI