zoukankan      html  css  js  c++  java
  • 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})
    

    这样就可以只关注文件的路径,不需要关注具体类型了。

  • 相关阅读:
    httpd sshd firewalld 服务后面的d的意思
    js parse_url 引发的
    python的shutil模块
    ubuntu18.04 LTS上安装并使用nvm管理node版本
    【ZIP】打包过滤指定目录和文件
    numpy中的reshape中参数为-1
    机器学习python常用模块
    Python3使运行暂停的方法
    thrift
    一个账号只能在一处登陆,不是单点登陆。
  • 原文地址:https://www.cnblogs.com/yoyoketang/p/13154681.html
Copyright © 2011-2022 走看看