Python 文件上传(Socket)

1.服务器端

 1 #__author: Lobin
 2 #__date:   2018/1/21
 3 import socket
 4 import os
 5 BASE_DIR=os.path.dirname(os.path.abspath(__file__))
 6 sk=socket.socket()
 7 address=('127.0.0.1',8080)
 8 sk.bind(address)
 9 sk.listen(3)
10 while True:
11     conn,add=sk.accept()
12     print(conn,add)
13     while True:
14         data=conn.recv(1024)
15         cmd,filename,filesize=str(data,'utf8').split('|')
16         path=os.path.join(BASE_DIR,'Up',filename)
17         filesize=int(filesize)
18 
19         f=open(path,'ab')
20         has_recv=0
21         while has_recv!=filesize:
22             data=conn.recv(1024)
23             f.write(data)
24             has_recv+=len(data)
25         f.close()
26         print('接收成功')
27 sk.close()

解析:约定服务器与客户端的上传格式为第一次发送文件大小信息,二次发送文件

1.1 cmd,filename,filesize=str(data,'utf8').split('|') 将客户端传送来的消息以“|”分割开来获取文件信息的命令cmd、文件名称filename、文件大小filesize

1.2 path=os.path.join(BASE_DIR,'Up',filename) 用路径拼接函数将本地路径BASE_DIR、文件夹Up、和文件名称拼接为服务器本地绝对路径

1.3  filesize=int(filesize) 将字符号转换为int

1.4  打开文件接收数据以bytes类型接收并写入ab模式

 

2.客户端

 1 #__author: Lobin
 2 #__date:   2018/1/21
 3 import socket
 4 import os
 5 BASE_DIR=os.path.dirname(os.path.abspath(__file__))
 6 sk=socket.socket()
 7 address=('127.0.0.1',8080)
 8 sk.connect(address)
 9 while True:
10     inp=input('>>>').strip()
11     cmd,path=inp.split('|')
12     path=os.path.join(BASE_DIR,path)
13     file_name=os.path.basename(path)
14     file_size=os.stat(path).st_size
15     file_info='post|%s|%s'%(file_name,file_size)
16     sk.sendall(bytes(file_info,'utf8'))
17 
18     f=open(path,'rb')
19     has_sent=0
20     while has_sent!=file_size:
21         data=f.read(1024)
22         sk.sendall(data)
23         has_sent+=len(data)
24     f.close()
25     print('上传成功')
26 sk.close()

解析:约定服务器与客户端的上传格式为第一次发送文件大小信息,二次发送文件

2.1 path=os.path.join(BASE_DIR,'Up',filename) 用路径拼接函数将本地路径BASE_DIR、文件夹Up、和文件名称拼接为服务器本地绝对路径

2.2  file_size=os.stat(path).st_size 利用次函数获取文件的大小

2.3  打开文件发送数据以bytes类型读取并发送rb模式

注意:当操作完文件后,需要将其 关闭,f.close()否则无法再文件打开的模式下再次打开查看文件内容

 

posted on 2018-01-21 02:04  可爱的春哥  阅读(129)  评论(0)    收藏  举报

导航