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})
这样就可以只关注文件的路径,不需要关注具体类型了。
相关推荐
kernelstudy 2020-06-16
atb 2020-04-18
iamplane 2020-03-26
linuxisperfect 2020-03-05
taiyangshenniao 2019-12-27
WordPress 2019-12-15
icycolawater 2011-05-08
芒果先生Mango 2017-09-04
Will0 2012-03-21
zealfish 2019-03-09
85520694 2019-09-05
84407805 2019-08-25
futurezone 2014-10-17
tugangkai 2017-05-23
wangfengqingyang 2011-10-19
哥哥的CSDN集 2011-07-02
Attend 2011-06-09
HelloJohn 2015-04-29