python接口自動化32-上傳文件時自動判斷文件類型(filetype)


前言

如何判斷一個文件的類型呢,判斷這個文件是png還jpg,還是mp3文件?
filetype 包是 python 用來判斷文件類型的依賴包,github地址https://github.com/h2non/filetype.py

filetype 安裝

pip install filetype

簡介

一個小巧自由開放Python開發包,主要用來獲得文件類型。包要求Python 3.+

功能特色

  • 簡單友好的API
  • 支持寬范圍文件類型
  • 提供文件擴展名和MIME類型判斷
  • 文件的MIME類型擴展新增
  • 通過文件(圖像、視頻、音頻…)簡單分析
  • 可插拔:添加新的自定義類型的匹配
  • 快,即使處理大文件
  • 只需要前261個字節表示的最大文件頭,這樣你就可以通過一個單字節
  • 依賴自由(只是Python代碼,沒有C的擴展,沒有libmagic綁定)
  • 跨平台文件識別

使用示例

import filetype


def main():
    kind = filetype.guess('tests/fixtures/sample.jpg')
    if kind is None:
        print('Cannot guess file type!')
        return

    print('File extension: %s' % kind.extension)
    print('File MIME type: %s' % kind.mime)

if __name__ == '__main__':
    main()

結合文件上傳使用示例

接下來看下使用場景,在前面接口測試文件上傳的時候,參考這篇https://www.cnblogs.com/yoyoketang/p/8024039.html

from requests_toolbelt import MultipartEncoder
import requests

m = MultipartEncoder(
    fields = [
    ('source', ('f1.ext', f1, 'application/x-example-mimetype')),
    ('source', ('f2.ext', f2, 'application/x-example-mimetype')),
]
    )

r = requests.post('http://httpbin.org/post', 
                  data=m,
                  headers={'Content-Type': m.content_type})

imgFile 后面的參數 ("1.png", open("d:\\1.png", "rb"), "image/png"), 每次都需要根據不同的文件類型去修改成對應的mime類型。
接下來可以用上面的自動獲取文件類型的方法,寫個函數,只需傳文件的路徑即可自動獲取

import filetype
import os
from requests_toolbelt import MultipartEncoder
import requests
# 作者-上海悠悠 QQ交流群:717225969


def upload(filepath="files/122.png"):
    '''根據文件路徑,自動獲取文件名稱和文件mime類型'''
    kind = filetype.guess(filepath)
    if kind is None:
        print('Cannot guess file type!')
        return
    # 媒體類型,如:image/png
    mime_type = kind.mime
    # 文件真實路徑
    file_real_path = os.path.realpath(filepath)
    # 獲取文件名 122.png
    fullflname = os.path.split(file_real_path)[-1]
    return (fullflname, open(file_real_path, "rb"), mime_type)


m = MultipartEncoder(
    fields = [
                ('source', upload(filepath="files/122.png")),
                ('source', upload(filepath="files/123.png")),
            ]
            )

r = requests.post('http://httpbin.org/post',
                  data=m,
                  headers={'Content-Type': m.content_type})

這樣就可以只關注文件的路徑,不需要關注具體類型了。


免責聲明!

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



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