zoukankan      html  css  js  c++  java
  • python接口自动化(三十) 上传文件时自动判断文件类型(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('D:\生活\儿歌\儿歌-拔萝卜.mp3')
        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()
    

     运行结果

     结合文件上传使用示例

    requests_toolbelt使用参考https://www.cnblogs.com/canglongdao/p/13440314.html

    # coding:utf-8
    from requests_toolbelt import MultipartEncoder
    import requests
    
    m = MultipartEncoder(
        fields = [
        ('source', ('ch', open("d:\ch.jpg","rb"), 'image/jpep')),
        ('source', ('hc', open("d:\hc.jpg","rb"), 'image/jpeg')),
    ]
        )
    
    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
    def up(filepath="d:\ch.jpg"):
        #根据文件路径,自动获取文件名称和文件mime类型
        a=filetype.guess(filepath)
        if a is None:
            print('Cannot guess file_type!')
        #媒体类型
        typee=a.mime
        #文件真实路径
        realp=os.path.realpath(filepath)
        #获取文件名
        fname=os.path.split(filepath)[-1]
        return (fname,open(realp,"rb"),typee)
    m=MultipartEncoder(
        fields=[
            ('source',up()),
        ])
    
    r=requests.post('http://httpbin.org/post',data=m,headers={'Content-Type':m.content_type})
    print(r.text)
    

     运行结果

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

    越努力,越幸运!!! good good study,day day up!!!
  • 相关阅读:
    PBE加密 .net 实现
    手把手教你写一个windows服务 【基于.net】 附实用小工具{注册服务/开启服务/停止服务/删除服务}
    fish redux 个人理解
    .net Core 图片验证码 基于SkiaSharp实现
    .net core webapi jwt 更为清爽的认证 ,续期很简单(2)
    js删除数组对象中符合条件的数据
    编译.net .net Core程序 代码,仅做备份
    Mybatis架构相关的知识
    java选择题知识总结大全
    Mybatis详解(二) sqlsession的创建过程
  • 原文地址:https://www.cnblogs.com/canglongdao/p/13456689.html
Copyright © 2011-2022 走看看