上传文件验证

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

  • 获取文件上传的二进制数据
  1. # 获取上传文件
  2. file = request.files.get('file')
  3. if file:
  4. # 大文件
  5. if hasattr(file.stream._file, 'peek'):
  6. print(file.stream._file.peek())
  7. # 小文件
  8. elif hasattr(file.stream._file, 'getvalue'):
  9. print(file.stream._file.getvalue())
  10. else:
  11. pass
  • 文件头验证
  1. # 类型字典
  2. def typeList():
  3. return {
  4. "FFD8FF": "jpg",
  5. "89504E47": "png",
  6. "255044462D312E": "pdf",
  7. "504B0304": "zip",
  8. "47494638": "gif",
  9. "49492A00": "tif",
  10. "424D": "bmp",
  11. "41433130": "dwg",
  12. "38425053": "psd",
  13. "7B5C727466": "rtf",
  14. "3C3F786D6C": "xml",
  15. "68746D6C3E": "html",
  16. "44656C69766572792D646174653A": "eml",
  17. "CFAD12FEC5FD746F": "dbx",
  18. "2142444E": "pst",
  19. "D0CF11E0": "xls.or.doc",
  20. "5374616E64617264204A": "mdb",
  21. "FF575043": "wpd",
  22. "252150532D41646F6265": "eps.or.ps",
  23. "AC9EBD8F": "qdf",
  24. "E3828596": "pwl",
  25. "52617221": "rar",
  26. "57415645": "wav",
  27. "41564920": "avi",
  28. "2E7261FD": "ram",
  29. "2E524D46": "rm",
  30. "000001BA": "mpg",
  31. "000001B3": "mpg",
  32. "6D6F6F76": "mov",
  33. "3026B2758E66CF11": "asf",
  34. "4D546864": "mid",
  35. "4D5A": "pe"
  36. }
  37.  
  38. # 字节码转16进制字符串
  39. def bytes2hex(bytes):
  40. num = len(bytes)
  41. hexstr = u""
  42. for i in range(num):
  43. t = u"%x" % bytes[i]
  44. if len(t) % 2:
  45. hexstr += u"0"
  46. hexstr += t
  47. return hexstr.upper()
  48.  
  49. # 获取文件类型
  50. def filetype(binfile): # binfile 上传文件的二进制数据
  51. tl = typeList()
  52. ftype = 'unknown'
  53. for hcode in tl.keys():
  54. numOfBytes = len(hcode) / 2 # 需要读多少字节
  55. numOfBytes = int(numOfBytes)
  56.  
  57. k, hbytes = 0, []
  58. for i in binfile:
  59. if k < numOfBytes:
  60. hbytes.append(i)
  61. k += 1
  62. else:
  63. break
  64.  
  65. hbytes = tuple(hbytes)
  66. f_hcode = bytes2hex(hbytes)
  67. if f_hcode == hcode:
  68. ftype = tl[hcode]
  69. break
  70. # 返回类型字典的value
  71. return ftype
  • 文件类型验证
  1. dict = {
  2. "jpg": "jpeg",
  3. "png": "png",
  4. "zip": "zip",
  5. "pdf": "pdf",
  6. "md": "octet-stream"
  7. }
  8.  
  9. # 检测文件content_type
  10. for type in types:
  11. if dict[type] in file.content_type:
  12. break
  13. else:
  14. pass

  

  • 文件后缀验证
  1. # 检测文件后缀
  2. type = file.filename.split('.')[-1]
  3. if type not in types:
  4. 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. Codeforces 1068 - A/B/C/D/E - (Done)

    链接:http://codeforces.com/contest/1068 A - Birthday - [计算题] 题意:一共 $N$ 种硬币,我已经有其中 $K$ 种,我的 $M$ 个朋友每人送我 ...

  2. POJ 1321 - 棋盘问题 - [经典DFS]

    题目链接:http://poj.org/problem?id=1321 Time Limit: 1000MS Memory Limit: 10000K Description 在一个给定形状的棋盘(形 ...

  3. 把项目运行到本地环境及mysql配置

    1. 添加本地域名C:\Windows\System32\drivers\etc\hosts 127.0.0.1 local.v7.com 2. 添加一个apache虚拟站点D:\wamp64\bin ...

  4. ORACLE——存储过程

    存储过程procedure 被内容来自<oracle从入门到精通——明日科技>一书 存储过程是一种命名的PL/SQL程序快,存储过程被保存在数据库中,它不可以被SQL语句直接执行或调用,只 ...

  5. 【Algorithm】-NO.140.Algorithm.1.Algorithm.1.001-【空间复杂度 时间复杂度 o(1), o(n), o(logn), o(nlogn)】-

    Style:Mac Series:Java Since:2018-09-10 End:2018-09-10 Total Hours:1 Degree Of Diffculty:5 Degree Of ...

  6. oracle 新建用户后赋予的权限语句

    grant create session,resource to itsys; grant create table to itsys;grant resource to itsys;grant cr ...

  7. javaScript核心基础

    JavaScript 是属于网络的脚本语言! JavaScript 作用:被数百万计的网页用来改进设计.验证表单.检测浏览器.创建cookies(js也可创建cookie,在浏览器里面创建),以及更多 ...

  8. ThinkPHP数据库操作相关

  9. unittest改写传参方法

    Python主要讲究简洁简单使用,所以它不像junit一样支持参数化测试,需要改装一下也可以传参.直接上代码实例 import unittest class ParametrizedTestCase( ...

  10. ASP.NET页面之间传值的方式之Session(个人整理)

    Session Session在ASP.NET中,表示客户端(Goggle,Firefox,IE等)与服务器端的会话,用来存储特定会话信息,准确来说,是用来存储特定用户信息.当客户端向服务器发送一个请 ...