01 ftp上传简单示例客户端

本文介绍了一个使用Python实现的客户端文件上传过程,通过socket连接到本地服务器,并发送文件大小及名称等元数据,随后分块传输文件数据。文章详细展示了如何使用os、socket、json和struct模块来完成这一任务。
import os
import socket
import json
import struct
client = socket.socket()
client.connect(('127.0.0.1',8001))

#统计文件大小
file_size = os.path.getsize(r'D:\python_workspace_s18\day029\aaa.mp4')


#统计文件描述信息,给服务端,服务端按照我的文件描述信息来保存文件,命名文件等等,现在放到一个字典里面了
file_info = {
    'file_name':'aaa.mp4',
    'file_size':file_size,
}

#由于字典无法直接转换成bytes类型的数据,所以需要json来将字典转换为json字符串.在把字符串转换为字节类型的数据进行发送
#json.dumps是将字典转换为json字符串的方法
file_info_json = json.dumps(file_info)

#将字符串转换成bytes类型的数据
file_info_byte = file_info_json.encode('utf-8')

#为了防止黏包现象,将文件描述信息的长度打包后和文件的描述信息的数据一起发送过去
data_len = len(file_info_byte)
data_len_struct = struct.pack('i',data_len)

#发送文件描述信息
client.send(data_len_struct + file_info_byte)

#定义一个变量,=0,作为每次读取文件的长度的累计值
sum = 0
#打开的aaa.mp4文件,rb的形式,
with open('aaa.mp4','rb') as f:
    #循环读取文件内容
    while sum < file_size:
        #每次读取的文件内容,每次读取1024B大小的数据
        every_read_data = f.read(1024)
        #将sum累加,统计长度
        sum += len(every_read_data)
        #将每次读取的文件的真实数据返送给服务端
        client.send(every_read_data)

 

转载于:https://www.cnblogs.com/work14/p/10235883.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值