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)

 运行结果

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值