python实现文件分片上传的接口自动化

 更新时间:2020年11月19日 17:37:48   作者:杨佳啊  
这篇文章主要为大家详细介绍了python实现文件分片上传的接口自动化,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

背景和目的:

利用python request 编写脚本测试公司系统的文件上传接口。前端读取文件的大小然后文件分片传给后端,后端将每一片数据重新组合成文件。大概的过程是:前端将整个文件的md5、size(大小)、name(文件名)、ext(文件后缀)、totalchunk(分片总数)与分片文件的md5、chunk(分片数据),chunkindex(当前分片文件的下标)等传给后台,后台取得这些数据后,通过chunkindex将每一片数据重组,重组完后,进行md5校验,判断文件上传是否成功。我只需要去调用后台的接口,然后判断文件是否上传成功,并且上传没有错误,其他的文件校验就不用去深究。

开发前端使用的是vue,后台使用的是php,要利用python实现对这一接口的调用,那么就先要将前端数据给模拟出来,然后循环去调用接口,将文件分片上传,我的思路大概如下:

1.获取整个文件的大小、名字、后缀、分片总数,定义每片文件的大小:

def __init__(self,data):
  dat = json.loads(data)
  self.path = dat['path'] # 获取文件路径
  self.CHUNK_SIZE = 1024*1024*2 # 定义每片文件的大小
  self.size = os.path.getsize(dat['path']) # 获取文件的大小
  self.totalchunk = math.ceil(self.size / self.CHUNK_SIZE) # 获取文件的分片总数
  self.ext = os.path.basename(dat['path']).split('.').pop() # 获取文件的后缀
  self.name = os.path.basename(dat['path']) # 获取文件的名字

2.获取文件的md5,查看了开发那边的md5算法,利用python实现过程如下:

# 使用hashlib库的md5方法获取指定文件的md5
def getmd5(self,path):
m = hashlib.md5()
with open(path, 'rb') as f:
 for line in f:
  m.update(line)
  md5code = m.hexdigest()
  return md5code

 # 开发那边对md5的算法进行了优化,当文件的大小小于1M时,直接通过getmd5方法去获取文件的md5值;
 # 当文件大于1M时,通过截取整个文件中的某几个片段,然后拼接成一个文件,再去获取其md5值,最后删除这个文件
 def md5(self,path):
  if self.size < 1024 * 1024:
   return self.getmd5(path)
  f = open(path, 'rb')
  f.seek(0, 0)
  data = f.read(2012)
  f.seek(int(self.size / 2) - 1999, 0)
  data += f.read(1999)
  f.seek(-2010, 2)
  data += f.read(2010)
  f.close()
  path = 'D:/copy_' + str(os.path.basename(path))
  f = open(path, 'wb')
  f.write(data)
  f.close()
  val = self.getmd5(path)
  os.remove(path)
  return val

3.调用文件上传的接口

def uploading(self, chunkIndex):
  MD5 = self.md5(self.path) # 整个文件的md5
  start = (chunkIndex - 1) * self.CHUNK_SIZE # 截取文件的起始位置
  end = min(self.size, start + self.CHUNK_SIZE)# 截取文件的结束位置
  f = open(self.path, 'rb')
  f.seek(start)
  data = f.read(end) # 待分片上传的数据
  f.close()
  path1 = 'D:/copy_' + str(os.path.basename(self.path)) # 将该数据保存在本地
  f = open(path1, 'wb')
  f.write(data)
  f.close()
  chunk_md5 = self.md5(path1) # 读取分片上传数据的md5
  # 将所有的数据储存在files字典当中,利用requests的files传输数据
  # 使用requests files类型时,要像下面一样构建参数,不然会有错误
  files={
   'chunk':('blob',data,'application/octet-stream'),
   'name':(None,self.name),
   'ext':(None,self.ext),
   'index':(None,chunkIndex),
   'total': (None,self.totalchunk),
   'size': (None,self.size),
   'chunk_md5': (None,chunk_md5),
   'md5': (None,MD5),
  }
  # 使用requests发送接口请求
  res = self.request.send('post', 'https://10.104.17.222/bank/elements/uploading', verify=False, files=files)
  os.remove(path1) # 删除存在本地的分片文件
  return res.json()

4.循环调用文件上传的接口

chunkIndex = 1
 while chunkIndex <= totalchunk:
 res2 = upload.uploading(chunkIndex)
 chunkIndex += 1

5.从服务器上去读取通过接口上传的文件的md5值,判断是否正确

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Python实现人脸识别

    Python实现人脸识别

    这篇文章主要介绍了Python实现人脸识别,首选抓取多张图片,从中获取特征数据集和平均特征值然后写入 csv 文件 - 计算特征数据集的欧式距离作对比,下面一起来看具体得实现过程吧
    2022-01-01
  • 利用Python中xlwt模块操作excel的示例详解

    利用Python中xlwt模块操作excel的示例详解

    在开发中,我们最常见的数据问题之一,就是对数据进行导出整理给运营人员,所以操作excel就显得重中之重,在python中操作excel可以借助xlwt模块。感兴趣的可以跟随小编一起学习一下这篇文章
    2022-01-01
  • Python中字符串的基本使用详解

    Python中字符串的基本使用详解

    Python要求字符串必须使用引号括起来,使用单引号也行,使用双引号也行,只要两边的引号能配对即可,这篇文章主要给大家介绍了关于Python中字符串的基本使用,需要的朋友可以参考下
    2021-12-12
  • python实现简易自习室座位预约系统

    python实现简易自习室座位预约系统

    本文将结合实例代码,介绍python实现简易自习室座位预约系统,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • python压包的概念及实例详解

    python压包的概念及实例详解

    在本篇文章里小编给大家整理的是一篇关于python压包的概念及实例详解内容,有兴趣的朋友们可以参考学习下。
    2021-02-02
  • Python内置函数hex()的实现示例

    Python内置函数hex()的实现示例

    这篇文章主要介绍了Python内置函数hex()的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • python添加模块搜索路径和包的导入方法

    python添加模块搜索路径和包的导入方法

    今天小编就为大家分享一篇python添加模块搜索路径和包的导入方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • 浅谈TensorFlow中读取图像数据的三种方式

    浅谈TensorFlow中读取图像数据的三种方式

    这篇文章主要介绍了浅谈TensorFlow中读取图像数据的三种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • django实现用户注册实例讲解

    django实现用户注册实例讲解

    在本篇文章里小编给大家整理的是关于django用户注册的相关实例内容,有兴趣的朋友们学习下。
    2019-10-10
  • 如何利用Python让Excel快速按条件筛选数据

    如何利用Python让Excel快速按条件筛选数据

    平时总是要对Excel进行操作,整理了一下平时经常会用到的操作,下面这篇文章主要给大家介绍了关于如何利用Python让Excel快速按条件筛选数据的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-12-12

最新评论