日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

python 网盘上传_python学习笔记 day32 实现网盘上传下载功能

發(fā)布時(shí)間:2024/9/30 python 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 网盘上传_python学习笔记 day32 实现网盘上传下载功能 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1. 作業(yè)需求

借助socket模塊實(shí)現(xiàn)server端和client端的交互,擬實(shí)現(xiàn)網(wǎng)盤上傳下載的功能:

上傳: client端發(fā)送請(qǐng)求,把本地的文件上傳給server端,server端負(fù)責(zé)接收,然后server端的一個(gè)文件中寫入client端上傳的文件內(nèi)容;

下載: client端發(fā)送請(qǐng)求,想要下載server端某文件,server端接收請(qǐng)求后,給客戶端發(fā)送該文件的內(nèi)容(按字節(jié)讀取文件內(nèi)容,然后邊讀邊發(fā)送給客戶端)

之前自己試著寫了一個(gè):

1. 版本一(不完善--bymyself)

#server.py

importsocketimportpickle

sk=socket.socket()

sk.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)

sk.bind(("127.0.0.1",8080))

sk.listen()

conn,addr=sk.accept()whileTrue:

head=conn.recv(1024)

head=pickle.loads(head)

file_name=head["filename"]

file_size=head["filesize"]

file_type=head["filetype"]

file_path=head["filepath"]

file_path=file_path+'\\'+file_name+'.'+file_type

with open(file_path,'wb') as f:while file_size>0:

content=conn.recv(1024)

f.write(content)

file_size-=1024conn.close()

sk.close()

View Code

#client.py

importsocketimportpickle

sk=socket.socket()

sk.connect(("127.0.0.1",8080))whileTrue:

head={"filename":"test","filesize":2048,"filetype":"txt",'filepath':"E:\pyhtonworkspace\py3-pratice\Pycharm_workspace\python_fullstack\week8\day07"}

file_size= head["filesize"]

head=pickle.dumps(head)

sk.send(head)

with open("xixi","rb") as f:while file_size>0:

content=f.read(1024)

sk.send(content)

file_size-=1024sk.close()

View Code

也可以實(shí)現(xiàn)上傳功能(其實(shí)就是client端發(fā)送一個(gè)請(qǐng)求,想把本地的某一個(gè)文件上傳給server端),server端可以接收這個(gè)文件,然后寫入,但是有一點(diǎn)點(diǎn)問(wèn)題,到文件的最后 會(huì)多些一點(diǎn)亂七八糟的東西,這個(gè)問(wèn)題沒(méi)有解決

2. 版本二(Eva-J)

#server.py

importsocketimportpickleimportstruct

sk=socket.socket()

sk.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) #防止重啟服務(wù)器發(fā)生錯(cuò)誤

sk.bind(("127.0.0.1",8080)) #server端綁定IP地址和端口號(hào)

sk.listen()

conn,addr=sk.accept()

buffer=1024 #讀取文件的字節(jié)大小是1024

head_len_bytes=conn.recv(4) #因?yàn)閏lient端需要發(fā)送head報(bào)頭的長(zhǎng)度 int類型借助struct模板轉(zhuǎn)為byets類型發(fā)送,占有固定的長(zhǎng)度四個(gè)字節(jié)

head_len=struct.unpack("i",head_len_bytes)[0] #把報(bào)頭head的字節(jié)長(zhǎng)度 借助struct模塊轉(zhuǎn)為的bytes 再使用struct的unpack轉(zhuǎn)為int的整數(shù),代表head報(bào)頭的字節(jié)長(zhǎng)度

head_bytes=conn.recv(head_len) #字節(jié)類型,client端把報(bào)頭head使用pickle的dumps成bytes類型,直接發(fā)送,server直接接收head的bytes類型

head=pickle.loads(head_bytes) #把bytes類型的報(bào)頭head使用pickle反序列化為原來(lái)的字典類型

filesize=head["filesize"] #得到client端需要上傳的文件的長(zhǎng)度

filename=head["filename"]+"."+head["filetype"] #得到client端需要上傳的文件的文件名

with open(filename,"wb") as f: #由于對(duì)于一些視頻,音頻等文件是無(wú)法按行讀的,所以需要使用按照直接讀,所以文件的打開(kāi)方式都是rb 或者wb這種以二進(jìn)制的方式進(jìn)行的

while filesize>=0: #當(dāng)還有需要讀取的字節(jié)數(shù),就不斷地按照特定長(zhǎng)度的字節(jié)讀取文件內(nèi)容,然后寫到server端的同名文件中

if filesize>=buffer: #剩余的需要讀取的文件字節(jié)數(shù)大于buffer時(shí) 每次就按照buffer字節(jié)來(lái)讀

content=conn.recv(buffer)

f.write(content)

filesize-=bufferelse:

content=conn.recv(filesize)

f.write(content)

filesize-=buffer

conn.close()

sk.close()

#client.py

importsocketimportpickleimportstructimportos

sk=socket.socket()

sk.connect(("127.0.0.1",8080))

buffer=1024 #設(shè)置文件讀取的字節(jié)數(shù)

head={"filename":"2018ASID格式要求","filetype":"docx","filepath":r"F:\廈大課程-研二\研二上學(xué)期\2018ASID\格式要求","filesize":None} #定制報(bào)頭信息

filepath=os.path.join(head["filepath"],(head["filename"]+"."+head["filetype"])) #拼接路徑,其實(shí)就是所要上傳的文件路徑

filesize=os.path.getsize(filepath) #得到所要上傳的文件的字節(jié)數(shù)大小

head["filesize"]=filesize

head_bytes=pickle.dumps(head) #head想要從client端傳到server端,網(wǎng)絡(luò)傳輸必須序列化(pickle的結(jié)果時(shí)bytes,也可以使用json 序列化的結(jié)果是str)

head_bytes_len=len(head_bytes) #head報(bào)頭字節(jié)數(shù)的大小,因?yàn)榫W(wǎng)絡(luò)傳輸都是字節(jié)數(shù),必須要告訴對(duì)方需要接收多少字節(jié)才能準(zhǔn)確接收到該報(bào)頭信息

head_bytes_len_bytes=struct.pack("i",head_bytes_len) #把bytes類型的head 對(duì)應(yīng)的字節(jié)長(zhǎng)度這個(gè)整數(shù)int使用struct的pack模塊轉(zhuǎn)化為字節(jié),都是對(duì)應(yīng)四個(gè)字節(jié)#server端只需要接收四個(gè)字節(jié),就可以拿到head字節(jié)數(shù)的長(zhǎng)度,然后再接收這個(gè) 字節(jié)數(shù)的長(zhǎng)度 就可以完全拿到head信息

sk.send(head_bytes_len_bytes) #發(fā)送head報(bào)頭字節(jié)數(shù)長(zhǎng)度對(duì)應(yīng)的字節(jié)(4個(gè) 里面其實(shí)代表的是表頭的長(zhǎng)度信息)

sk.send(head_bytes) #接下來(lái)發(fā)送head報(bào)頭信息(字節(jié)類型的,server首先接收4個(gè)字節(jié)拿到head字節(jié)長(zhǎng)度,接著接收這個(gè)字節(jié)長(zhǎng)度 拿到head信息,bytes類型的,然后使用pickle反序列化成字典類型的head)

with open(filepath,'rb') as f: #打開(kāi)filepath對(duì)應(yīng)的文件---本地文件,,server端把需要上傳的本地文件 寫在py文件下的同名文件中

#由于視頻,音頻等文件需要按照字節(jié)來(lái)讀取文件,所以文件打開(kāi)的方式是rb

while filesize>=0:if filesize>=buffer:

content=f.read(buffer) #讀的內(nèi)容也是二進(jìn)制,bytes類型

sk.send(content)

filesize-=bufferelse:

content=f.read(filesize)

sk.send(content)

filesize-=buffer

sk.close()

運(yùn)行結(jié)果:

其實(shí)我只實(shí)現(xiàn)了上傳功能,下載的原理完全一樣的,直接把server 端和client端所做的工作互換就可以啦~

而且還可以加上比較人性化的交互功能,交給用戶選擇上傳還是下載,選擇路徑,文件名,這樣就顯得高大上啦~

總結(jié)

以上是生活随笔為你收集整理的python 网盘上传_python学习笔记 day32 实现网盘上传下载功能的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 一区二区三区在线免费视频 | 91视频网| caoprom超碰 | 校园春色自拍偷拍 | 91婷婷射| 天天射天天干 | caoporn视频在线 | 性久久久久久久久 | 亚洲欧美日韩另类 | 欧美日韩中文一区 | 五月天色网站 | 一区二区三区在线免费观看视频 | 国产亚洲精品久久久久久青梅 | 中文字幕av网址 | 黄色免费视频网站 | 大陆农村乡下av | 18av在线播放| 狠狠夜夜 | 日韩五十路 | 免看一级片 | 国产色无码精品视频 | 在线观看免费高清在线观看 | 2021国产精品视频 | 国产乱码精品一品二品 | 狠狠干影院 | 日韩麻豆| 亚洲成人av网址 | 亚洲视频一区二区 | 小早川怜子一区二区三区 | 久久久久人妻精品色欧美 | 别揉我奶头一区二区三区 | 成人在线你懂的 | 人妻丰满熟妇av无码区不卡 | 亚洲男女啪啪 | 精品久久国产 | 日韩国产欧美综合 | 日日射影院| 福利所第一导航 | 国产成人在线观看 | 天海翼av在线播放 | 国产字幕侵犯亲女 | 四虎免费观看 | 欧美视频自拍偷拍 | 日本 片 成人 在线 九色麻豆 | 亚洲热在线视频 | 99综合视频 | 成人黄色小说在线观看 | 夜夜精品一区二区无码 | 国产专区一 | 亚洲欧美在线观看视频 | 欧美国产日本 | 国产中文字幕三区 | 亚洲av无码一区二区乱子仑 | 99热都是精品 | 亚洲国产av一区二区三区 | 亚洲天堂2021av | 国产高清在线 | 中国少妇乱子伦视频播放 | 国产精品美女久久久免费 | r级无码视频在线观看 | 成年人爱爱视频 | 播金莲一级淫片aaaaaaa | 色婷婷婷婷 | 五月天狠狠操 | 91原创视频 | 日本不卡一二 | 国产精品999久久久 在线青草 | 婷久久 | 亚洲av无码一区二区二三区 | 韩国bj大尺度vip福利网站 | 欧美性生活一区二区 | 久久精品国产亚洲av麻豆 | 久久精品国产亚洲AV成人雅虎 | 精品久草 | av不卡网| 亚洲精品一区中文字幕乱码 | 色香影院| 久久色婷婷 | 国产一区二区三区免费看 | 亚洲精品在线免费观看视频 | 日本www黄 | 中国成人毛片 | 少妇一级淫片免费 | 亚洲GV成人无码久久精品 | 日日夜夜狠狠爱 | 成人免费观看在线视频 | 人妻精品久久久久中文字幕69 | 欧美整片第一页 | 久久久久97国产 | 好屌妞视频这里只有精品 | 波多野结衣绝顶大高潮 | 日本一区视频 | 免费一二三区 | 亚洲久久久久久久 | 午夜爱爱影院 | 成人欧美一区二区三区白人 | 青娱乐av| 亚洲一区 中文字幕 | 手机av免费观看 |