上传文件验证

上传文件验证分为:1、文件头验证  2、文件类型验证  3、文件后缀验证

  • 获取文件上传的二进制数据
# 获取上传文件
file = request.files.get('file')
if file:
# 大文件
if hasattr(file.stream._file, 'peek'):
print(file.stream._file.peek())
# 小文件
elif hasattr(file.stream._file, 'getvalue'):
print(file.stream._file.getvalue())
else:
pass
  • 文件头验证
# 类型字典
def typeList():
return {
"FFD8FF": "jpg",
"89504E47": "png",
"255044462D312E": "pdf",
"504B0304": "zip",
"47494638": "gif",
"49492A00": "tif",
"424D": "bmp",
"41433130": "dwg",
"38425053": "psd",
"7B5C727466": "rtf",
"3C3F786D6C": "xml",
"68746D6C3E": "html",
"44656C69766572792D646174653A": "eml",
"CFAD12FEC5FD746F": "dbx",
"2142444E": "pst",
"D0CF11E0": "xls.or.doc",
"5374616E64617264204A": "mdb",
"FF575043": "wpd",
"252150532D41646F6265": "eps.or.ps",
"AC9EBD8F": "qdf",
"E3828596": "pwl",
"52617221": "rar",
"57415645": "wav",
"41564920": "avi",
"2E7261FD": "ram",
"2E524D46": "rm",
"000001BA": "mpg",
"000001B3": "mpg",
"6D6F6F76": "mov",
"3026B2758E66CF11": "asf",
"4D546864": "mid",
"4D5A": "pe"
} # 字节码转16进制字符串
def bytes2hex(bytes):
num = len(bytes)
hexstr = u""
for i in range(num):
t = u"%x" % bytes[i]
if len(t) % 2:
hexstr += u"0"
hexstr += t
return hexstr.upper() # 获取文件类型
def filetype(binfile): # binfile 上传文件的二进制数据
tl = typeList()
ftype = 'unknown'
for hcode in tl.keys():
numOfBytes = len(hcode) / 2 # 需要读多少字节
numOfBytes = int(numOfBytes) k, hbytes = 0, []
for i in binfile:
if k < numOfBytes:
hbytes.append(i)
k += 1
else:
break hbytes = tuple(hbytes)
f_hcode = bytes2hex(hbytes)
if f_hcode == hcode:
ftype = tl[hcode]
break
# 返回类型字典的value
return ftype
  • 文件类型验证
dict = {
"jpg": "jpeg",
"png": "png",
"zip": "zip",
"pdf": "pdf",
"md": "octet-stream"
} # 检测文件content_type
for type in types:
if dict[type] in file.content_type:
break
else:
pass

  

  • 文件后缀验证
# 检测文件后缀
type = file.filename.split('.')[-1]
if type not in types:
pass

  

[python]上传文件验证的更多相关文章

  1. python 上传文件

    上周产品给我提了个需求,大体是做一个后台系统,管理游戏比赛落地页的数据更新,难点在于需要给CDN上传文件.现在把经验记录下来,下次有类似的需求能提高开发效率. 我使用的是网宿CDN,没有用网宿的SDK ...

  2. 记录python上传文件的坑(2)

    描述: 1.之前在写项目mock代码时,碰到一个上传文件的接口,但项目接口本身有token保护机制,碰到token失效时,需要重新获取一次token后,再次对上传文件发起请求,在实际调用中发现,第一次 ...

  3. python上传文件接口

    1.由于公司做接口测试,遇到了上传文件,一直搞了好久,原来是加了头部的原因def test_79(self): '''导入配置文件''' request = e['mysqlshujuku'] url ...

  4. 记录python上传文件的坑(1)

    import random import string import requests from requests_toolbelt import MultipartEncoder f = '2019 ...

  5. windows上python上传下载文件到linux服务器指定路径【转】

    从windows上传文件到linux,目录下的文件夹自动创建 #!/usr/bin/env python # coding: utf-8 import paramiko import datetime ...

  6. 使用python或robotframework调multipart/form-data接口上传文件

    这几天调一个multipart/form-data类型的接口,遇到点小阻碍.之前同事有使用urllib库写了个类似的方法实现,比较长,想要改的时候发现不太好使.在网上查找发现用requests库做这个 ...

  7. python通过http(multipart/form-data)上传文件的方法

    之前写过一篇博客,说的如何python如何通过http下载文件,今天写一篇博客来介绍如下,python如何通过request库实现上传文件 这里主要是解决multipart/form-data这种格式 ...

  8. java 附件上传时后台验证上传文件的合法性

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 3 ...

  9. Python脚本控制的WebDriver 常用操作 <二十六> 上传文件

    测试用例场景 上传文件的方法是找到上传文件的对象,通常是的对象.然后直接往这个对象send_keys,传入需要上传文件的正确路径.绝对路径和相对路径都可以,但是上传的文件必须存在,否则会报错. Pyt ...

随机推荐

  1. Spring Enable* 注解

    Spring提供了一系列以Enable开头的注解,这些注解本质上是激活Spring的某些管理功能.比如,EnableWebMvc. 这个注解引入了MVC框架在Spring 应用中需要用到的所有bean ...

  2. Python cffi学习

    cffi是连接Python与c的桥梁,可实现在Python中调用c文件.cffi为c语言的外部接口,在Python中使用该接口可以实现在Python中使用外部c文件的数据结构及函数. 由于资料较少,所 ...

  3. 15.2-uC/OS-III资源管理(信号量)

    1.信号量 信号量是一个“ 锁定机构”,代码需要获得钥匙才可以访问共享资源.占用该资源的任务不再使用该资源并释放资源时,其它任务才能够访问这个资源. 通常有两种类型的信号量:二值信号量和多值信号量. ...

  4. git:当本地分支中的代码和develop分支上有很多冲突,希望删掉本地分支,重新建立新的分支,怎么解决?

    git:当本地分支中的代码和develop分支上有很多冲突,希望删掉本地分支,重新建立新的分支,但是git中说你需要先解决当前的冲突,这种情况怎么解决 这种情况可以在代码编辑器中点击commit,然后 ...

  5. python frist lesson

    1.print("") 代表打印字符段 2.name2 = name ,然后改变name的赋值,name2的值还是以前name的值,说明name2指向的是内存中name的赋值. 3 ...

  6. 10 个非常实用的 SVG 动画操作JavaScript 库

      SVG 通常可以用作跨分辨率视频.这意味着在一块高分屏幕上不会降低图片的锐度.此外,你甚至可以让SVG动起来,通过使用一些javascript类库.下面,我们分享一些javascript类库,这些 ...

  7. Exercise about Shape

    #include <iostream> using namespace std; class point { int x; int y; public : point () { x=y=; ...

  8. 记账本微信小程序开发五

    准备做首页和分页 准备一些图标的图,用ps或者用创客贴都欧克 建图片的文件夹和首页的编辑

  9. 微信公众号开发流程,jssdk的使用以及签名算法的实现

    一 开发流程 1 基本配置-登录自己的公众号 A:新型微信认证,认证过的企业号才可以进行自定义菜单中的连接跳转: B:开发基本配置里面进行开发者iD查询,密码查询和重置和ip白名单配置: C:公众号设 ...

  10. random模块写的验证码

    import randomabc=''for i in range(4):    a=random.randrange(0,4)    if i != a:        b=chr(random.r ...