ftp上传小示例

Posted shachengcc1

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ftp上传小示例相关的知识,希望对你有一定的参考价值。

客户端

 1 import socket
 2 import os
 3 import json
 4 import struct
 5 #上传文件即发送我的数据,服务端来保存,保存的时候需要按照我的描述信息来
 6 #所以需要先发送文件的描述信息:文件名和文件大小
 7 
 8 client = socket.socket()
 9 client.connect((121.195.167.34,8004))
10 
11 file_size = os.path.getsize(rE:\bilibili下载\老男孩所有正式项目\粘包解决2服务端.py)
12 
13 #先发送文件的描述信息:文件名和文件大小
14 file_info = filename:粘包解决2服务端.py,
15              file_size:file_size
16 
17 #发送需要bytes,字典无法直接过去,需要json先转成json字符串再把字符串转bytes
18 file_str = json.dumps(file_info)
19 file_info_bytes = file_str.encode(utf-8)
20 
21 #为了防止粘包,先把文件描述信息的长度打包成4字节长度的内容,
22 #再把这个4字节内容和真正的文件的描述信息打包发送
23 info_len = len(file_info_bytes)
24 info_len_struct = struct.pack(i,info_len)
25 client.send(info_len_struct + file_info_bytes)
26 
27 
28 #准备发送文件真实数据,因为此时服务端已经准备好了接受文件信息里提到的文件长度
29 sum = 0
30 with open(粘包解决2服务端.py,rb) as f:
31     while sum < file_size:   #循环结束条件
32         #每次读取的长度
33         every_read = f.read(5)
34         sum += len(every_read)
35         client.send(every_read)
36         #累加统计文件每次读取的累计值

服务端

 1 import socket
 2 import struct
 3 import json
 4 
 5 server = socket.socket()
 6 server.bind((121.195.167.34,8004))
 7 server.listen()
 8 conn,addr = server.accept()
 9 
10 #首先接受描述信息的长度
11 file_struct = conn.recv(4)
12 file_info_len = struct.unpack(i,file_struct)[0]
13 
14 
15 #接受对应的长度的内容,将其转化为字典模式的描述信息
16 file_info_bytes = conn.recv(file_info_len)
17 file_info_json = file_info_bytes.decode(utf-8)
18 file_info = json.loads(file_info_json)
19 21 recv_sum = 0
22 
23 file_path = E:\\bilibili下载+ \\ + file_info[filename]
24 
25 with open(file_path,wb) as f:
26     while recv_sum < file_info[file_size]:
27         every_recv = conn.recv(5)
28         f.write(every_recv)
29         recv_sum += len(every_recv)

 

以上是关于ftp上传小示例的主要内容,如果未能解决你的问题,请参考以下文章

ftp上传单一文件示例

php FTP文件上传示例

PHP FTP文件上传示例

python--FTP 上传视频示例

ftp工具上传,三大ftp上传工具(推荐)

python之路--FTP 上传视频示例