首頁 > 軟體

Python介面自動化之檔案上傳/下載介面詳解

2022-04-05 10:00:20

〇、前言

檔案上傳/下載介面與普通介面類似,但是有細微的區別。

如果需要傳送檔案到伺服器,例如:上傳檔案、圖片、視訊等,就需要傳送二進位制資料,上傳檔案一般使用的都是 Content-Type: multipart/form-data 資料型別,可以傳送檔案,也可以傳送相關的訊息體資料。

反之,檔案下載就是將二進位制格式的響應內容儲存到本地,並根據需要下載的檔案的格式來寫檔名,例如: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. 程式碼實現

(1)實現步驟:

構造檔案資料,通過open函數以二進位制方式開啟檔案

檔案上傳介面引數與普通post請求一樣,需要寫成Key和Value模式,Key為引數名稱file(也是元件的name屬性),Value為一個元組(與普通介面不同的地方)

"file": (
    "", # 元組第一個值為檔名稱,沒有則取None
    open(r"F:pdf_file.pdf", "rb"), # 若第一個值非None,則取檔案open開啟的二進位制流,否則直接寫檔案路徑,如"F:pdf_file.pdf"
    "pdf" # 檔案型別
)
"file": (
    None,
    "F:pdf_file.pdf"
)

構造其他資料

{
    "title": "介面發起的檔案",
    "fileType": "pdf"
}

傳送請求,將檔案資料以 files 引數傳入,其他訊息體資料通過 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": "介面發起的檔案",
                "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小學生蔡坨坨
# 時間:2022/3/12 21:04
# 功能:根據檔案型別建立合同檔案
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": "介面發起的檔案",
                "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[]下載可選項,NORMAL(正文),ATTACHMENT(附件)
needCompressForOneFileBoolean是,預設單檔案也壓縮當下載的檔案僅一份時,是否壓縮

2. 程式碼實現

# -*- coding:utf-8 -*-
# 作者:IT小學生蔡坨坨
# 時間: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"獲取返回內容
        # 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介面自動化之檔案上傳/下載介面的文章就介紹到這了,更多相關Python檔案上傳/下載介面內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com