欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python實現文件分片上傳的接口自動化

 更新時間:2020年11月19日 17:37:48   作者:楊佳啊  
這篇文章主要為大家詳細介紹了python實現文件分片上傳的接口自動化,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

背景和目的:

利用python request 編寫腳本測試公司系統(tǒng)的文件上傳接口。前端讀取文件的大小然后文件分片傳給后端,后端將每一片數據重新組合成文件。大概的過程是:前端將整個文件的md5、size(大?。?、name(文件名)、ext(文件后綴)、totalchunk(分片總數)與分片文件的md5、chunk(分片數據),chunkindex(當前分片文件的下標)等傳給后臺,后臺取得這些數據后,通過chunkindex將每一片數據重組,重組完后,進行md5校驗,判斷文件上傳是否成功。我只需要去調用后臺的接口,然后判斷文件是否上傳成功,并且上傳沒有錯誤,其他的文件校驗就不用去深究。

開發(fā)前端使用的是vue,后臺使用的是php,要利用python實現對這一接口的調用,那么就先要將前端數據給模擬出來,然后循環(huán)去調用接口,將文件分片上傳,我的思路大概如下:

1.獲取整個文件的大小、名字、后綴、分片總數,定義每片文件的大?。?/p>

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,查看了開發(fā)那邊的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

 # 開發(fā)那邊對md5的算法進行了優(yōu)化,當文件的大小小于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發(fā)送接口請求
  res = self.request.send('post', 'https://10.104.17.222/bank/elements/uploading', verify=False, files=files)
  os.remove(path1) # 刪除存在本地的分片文件
  return res.json()

4.循環(huán)調用文件上傳的接口

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

5.從服務器上去讀取通過接口上傳的文件的md5值,判斷是否正確

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • python實現發(fā)送郵件功能

    python實現發(fā)送郵件功能

    這篇文章主要為大家詳細介紹了python實現發(fā)送郵件功能,使用的模塊是smtplib、MIMEText,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • pygame加載中文名mp3文件出現error

    pygame加載中文名mp3文件出現error

    本文主要介紹了pygame加載中文名mp3文件出現error的解決方案。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-03-03
  • python?Ajenti控制面板輕松地管理所有服務器網站

    python?Ajenti控制面板輕松地管理所有服務器網站

    Ajenti是一個值得擁有的管理面板,免費開源的管理面板工具,可以幫助你集中管理多個服務器和網站,Ajenti?支持?Linux、BSD、Mac?OS?X和Windows?等多個操作系統(tǒng),并且可以通過一個直觀的?Web?界面來完成各種系統(tǒng)管理任務
    2024-01-01
  • Python?PyQt5中窗口數據傳遞的示例詳解

    Python?PyQt5中窗口數據傳遞的示例詳解

    開發(fā)應用程序時,若只有一個窗口則只需關心這個窗口里面的各控件之間如何傳遞數據。如果程序有多個窗口,就要關心不同的窗口之間是如何傳遞數據。本文介紹了PyQt5中三種窗口數據傳遞,需要的可以了解一下
    2022-12-12
  • Python Socket編程實現猜數字游戲交互體驗

    Python Socket編程實現猜數字游戲交互體驗

    當利用Python的Socket編程創(chuàng)建一個猜數字游戲時,需要分別實現服務器端和客戶端的邏輯,本文將詳細描述這兩個部分的功能和代碼片段
    2024-01-01
  • 8種用Python實現線性回歸的方法對比詳解

    8種用Python實現線性回歸的方法對比詳解

    這篇文章主要介紹了8種用Python實現線性回歸的方法對比詳解,說到如何用Python執(zhí)行線性回歸,大部分人會立刻想到用sklearn的linear_model,但事實是,Python至少有8種執(zhí)行線性回歸的方法,sklearn并不是最高效的,需要的朋友可以參考下
    2019-07-07
  • Python編程之string相關操作實例詳解

    Python編程之string相關操作實例詳解

    這篇文章主要介紹了Python編程之string相關操作,結合實例形式分析了Python字符串相關函數與常見操作技巧,需要的朋友可以參考下
    2017-07-07
  • python安裝virtualenv虛擬環(huán)境步驟圖文詳解

    python安裝virtualenv虛擬環(huán)境步驟圖文詳解

    這篇文章主要介紹了python安裝virtualenv虛擬環(huán)境步驟,本文通過圖文并茂的形式給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-09-09
  • Python Matplotlib繪制動畫的代碼詳解

    Python Matplotlib繪制動畫的代碼詳解

    使用matplotlib可以很容易地創(chuàng)建動畫框架。在本文中我們就將利用Matplotlib制作幾個簡單的動畫,文中的示例代碼講講詳細,感興趣的可以了解下
    2022-05-05
  • Django框架的使用教程路由請求響應的方法

    Django框架的使用教程路由請求響應的方法

    這篇文章主要介紹了Django框架的使用教程路由請求響應的方法,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07

最新評論