最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python實(shí)現(xiàn)文件分片上傳的接口自動(dòng)化

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

背景和目的:

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

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

1.獲取整個(gè)文件的大小、名字、后綴、分片總數(shù),定義每片文件的大?。?/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) # 獲取文件的分片總數(shù)
  self.ext = os.path.basename(dat['path']).split('.').pop() # 獲取文件的后綴
  self.name = os.path.basename(dat['path']) # 獲取文件的名字

2.獲取文件的md5,查看了開發(fā)那邊的md5算法,利用python實(shí)現(xiàn)過程如下:

# 使用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ā)那邊對(duì)md5的算法進(jìn)行了優(yōu)化,當(dāng)文件的大小小于1M時(shí),直接通過getmd5方法去獲取文件的md5值;
 # 當(dāng)文件大于1M時(shí),通過截取整個(gè)文件中的某幾個(gè)片段,然后拼接成一個(gè)文件,再去獲取其md5值,最后刪除這個(gè)文件
 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.調(diào)用文件上傳的接口

def uploading(self, chunkIndex):
  MD5 = self.md5(self.path) # 整個(gè)文件的md5
  start = (chunkIndex - 1) * self.CHUNK_SIZE # 截取文件的起始位置
  end = min(self.size, start + self.CHUNK_SIZE)# 截取文件的結(jié)束位置
  f = open(self.path, 'rb')
  f.seek(start)
  data = f.read(end) # 待分片上傳的數(shù)據(jù)
  f.close()
  path1 = 'D:/copy_' + str(os.path.basename(self.path)) # 將該數(shù)據(jù)保存在本地
  f = open(path1, 'wb')
  f.write(data)
  f.close()
  chunk_md5 = self.md5(path1) # 讀取分片上傳數(shù)據(jù)的md5
  # 將所有的數(shù)據(jù)儲(chǔ)存在files字典當(dāng)中,利用requests的files傳輸數(shù)據(jù)
  # 使用requests files類型時(shí),要像下面一樣構(gòu)建參數(shù),不然會(huì)有錯(cuò)誤
  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ā)送接口請(qǐng)求
  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)調(diào)用文件上傳的接口

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

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

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python實(shí)現(xiàn)人臉識(shí)別

    Python實(shí)現(xiàn)人臉識(shí)別

    這篇文章主要介紹了Python實(shí)現(xiàn)人臉識(shí)別,首選抓取多張圖片,從中獲取特征數(shù)據(jù)集和平均特征值然后寫入?csv?文件?-?計(jì)算特征數(shù)據(jù)集的歐式距離作對(duì)比,下面一起來看具體得實(shí)現(xiàn)過程吧
    2022-01-01
  • 利用Python中xlwt模塊操作excel的示例詳解

    利用Python中xlwt模塊操作excel的示例詳解

    在開發(fā)中,我們最常見的數(shù)據(jù)問題之一,就是對(duì)數(shù)據(jù)進(jìn)行導(dǎo)出整理給運(yùn)營人員,所以操作excel就顯得重中之重,在python中操作excel可以借助xlwt模塊。感興趣的可以跟隨小編一起學(xué)習(xí)一下這篇文章
    2022-01-01
  • Python中字符串的基本使用詳解

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

    Python要求字符串必須使用引號(hào)括起來,使用單引號(hào)也行,使用雙引號(hào)也行,只要兩邊的引號(hào)能配對(duì)即可,這篇文章主要給大家介紹了關(guān)于Python中字符串的基本使用,需要的朋友可以參考下
    2021-12-12
  • python實(shí)現(xiàn)簡(jiǎn)易自習(xí)室座位預(yù)約系統(tǒng)

    python實(shí)現(xiàn)簡(jiǎn)易自習(xí)室座位預(yù)約系統(tǒng)

    本文將結(jié)合實(shí)例代碼,介紹python實(shí)現(xiàn)簡(jiǎn)易自習(xí)室座位預(yù)約系統(tǒng),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • python壓包的概念及實(shí)例詳解

    python壓包的概念及實(shí)例詳解

    在本篇文章里小編給大家整理的是一篇關(guān)于python壓包的概念及實(shí)例詳解內(nèi)容,有興趣的朋友們可以參考學(xué)習(xí)下。
    2021-02-02
  • Python內(nèi)置函數(shù)hex()的實(shí)現(xiàn)示例

    Python內(nèi)置函數(shù)hex()的實(shí)現(xiàn)示例

    這篇文章主要介紹了Python內(nèi)置函數(shù)hex()的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • python添加模塊搜索路徑和包的導(dǎo)入方法

    python添加模塊搜索路徑和包的導(dǎo)入方法

    今天小編就為大家分享一篇python添加模塊搜索路徑和包的導(dǎo)入方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • 淺談TensorFlow中讀取圖像數(shù)據(jù)的三種方式

    淺談TensorFlow中讀取圖像數(shù)據(jù)的三種方式

    這篇文章主要介紹了淺談TensorFlow中讀取圖像數(shù)據(jù)的三種方式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • django實(shí)現(xiàn)用戶注冊(cè)實(shí)例講解

    django實(shí)現(xiàn)用戶注冊(cè)實(shí)例講解

    在本篇文章里小編給大家整理的是關(guān)于django用戶注冊(cè)的相關(guān)實(shí)例內(nèi)容,有興趣的朋友們學(xué)習(xí)下。
    2019-10-10
  • 如何利用Python讓Excel快速按條件篩選數(shù)據(jù)

    如何利用Python讓Excel快速按條件篩選數(shù)據(jù)

    平時(shí)總是要對(duì)Excel進(jìn)行操作,整理了一下平時(shí)經(jīng)常會(huì)用到的操作,下面這篇文章主要給大家介紹了關(guān)于如何利用Python讓Excel快速按條件篩選數(shù)據(jù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-12-12

最新評(píng)論

阿克苏市| 肥城市| 湖北省| 咸阳市| 三河市| 来安县| 连平县| 竹北市| 宣威市| 红安县| 吕梁市| 阆中市| 仙桃市| 三河市| 宜黄县| 兴隆县| 唐河县| 朝阳区| 奉节县| 综艺| 罗甸县| 桦甸市| 扎囊县| 萨嘎县| 阳泉市| 沐川县| 自治县| 荆州市| 方正县| 沅江市| 长沙市| 乐平市| 三门峡市| 南通市| 沁阳市| 陕西省| 中西区| 屏边| 潼关县| 台江县| 柘荣县|