python ftp下载文件_文件上传下载Python
点击上方蓝字关注我!
图片来源 pexels.com
简单实现文件上传、下载
1
Server端
# -*- coding: utf-8 -*-import jsonimport os__author__ = 'sange'# @Time : 2020/8/17 下午5:26# @Author : 'sange'# @File : tcpserver_socket.py# @Software: PyCharmimport socketserverclass MyTCPHandler(socketserver.BaseRequestHandler): def put(self,*args): ''' 接收客户端传过来的文件''' cmd_dict = args[0] filename= cmd_dict["filename"] filenameSize = cmd_dict["fileSize"] if os.path.isfile(filename): f = open(filename + "-new","wb") else: f = open(filename,"wb") self.request.send(b"200 ok") recved_size = 0 while recved_size < filenameSize: recv_data = self.request.recv(1024) f.write(recv_data) recved_size+=len(recv_data) else: print("file [%s] has uploaded..." % filename) def handle(self): while True: try: self.data = self.request.recv(1024).strip() print("{} wrote:".format(self.client_address[0])) print(self.data) if not self.data: break cmd = json.loads(self.data.decode()) action= cmd["action"] if hasattr(self,action): doaction=getattr(self,action) doaction(cmd) except ConnectionResetError as e: print("err",e) break def get(self,*args): fileName = args[0]["fileName"] if os.path.isfile(fileName): file_size = os.path.getsize(fileName) self.request.send(str(file_size).encode("utf-8")) # 发送给客户端文件大小 self.request.recv(1024) # wait client send 粘包 f = open(fileName,"rb") for line in f: self.request.send(line) f.close() print("[" + fileName + "]" + "文件发送完毕。。。。。。。")if __name__ == "__main__": ip_port = ("localhost", 8000) s = socketserver.ThreadingTCPServer(ip_port,MyTCPHandler) s.serve_forever()
2
Client端
# -*- coding: utf-8 -*-import jsonimport random__author__ = 'sange'# @Time : 2020/8/17 下午5:44# @Author : 'sange'# @File : tcpserver_client.py# @Software: PyCharm''''''import socket,os,sysclass FtpClient(object): def __init__(self): self.client = socket.socket() def connect(self,ip,port): ''' connet server :param ip: :param port: :return: ''' self.client.connect((ip,port)) def help(self): msg = ''' ls pwd cd put filename get filename ''' print(msg) def jiaohu(self): ''' send cmd to server,and recv server return result ''' while True: cmd_input = input("输入要执行的操作==>").strip() if len(cmd_input) == 0:continue cmd_action = cmd_input.split()[0] #获取命令执行相应的方法 如 get test.py执行下面的get方法,put则执行下面的put方法 if hasattr(self,"cmd_%s" % cmd_action): func = getattr(self,"cmd_%s" % cmd_action) func(cmd_input) else: self.help() def cmd_put(self,*args): #解析命令参数,put filename cmd_ac = args[0].split() if len(cmd_ac) > 1: filename = cmd_ac[1] if os.path.isfile(filename): fileSize = os.path.getsize(filename) put_param = { "fileSize":fileSize, "action":"put", "filename":filename } self.client.send(json.dumps(put_param).encode("utf-8")) #防止粘包,等服务器确认 recv = self.client.recv(1024) f = open(filename,"rb") for line in f: self.client.send(line) else: print("%s file upload success" % filename) f.close() else: print("%s file is not exist"%filename) def cmd_get(self,*args): ''' get filename''' cmd_inp = args[0] # get test fileName = cmd_inp.split()[1] json_get = { "fileName":fileName, "action":"get" } self.client.send(json.dumps(json_get).encode("utf-8")) server_response = self.client.recv(1024) print("servr response:", server_response) self.client.send(b"ready to recv file") file_total_size = int(server_response.decode()) received_size = 0 f = open(fileName+'-'+str(random.randint(100000,900000)), 'wb') while received_size < file_total_size: if file_total_size - received_size > 1024: size = 1024 else: size = file_total_size - received_size data = self.client.recv(size) received_size += len(data) f.write(data) else: print("cmd res receive done...", received_size) f.close()if __name__ == "__main__": f = FtpClient() f.connect("localhost",8000) f.jiaohu()
------------------------end-----------------------
扫码关注 获取更多
python ftp下载文件_文件上传下载Python相关推荐
- 如何在Webstorm/Phpstorm中设置连接FTP,并快速进行文件比较,上传下载,同步等操作...
Phpstorm除了能直接打开localhost文件之外,还可以连接FTP,除了完成正常的数据传递任务之外,还可以进行本地文件与服务端文件 的异同比较,同一文件自动匹配目录上传,下载,这些功能是平常I ...
- 腾讯视频下载安装_如何上传视频到腾讯视频平台
播放器软件很多,本文小编给大家推荐腾讯视频.我们可以在腾讯视频播放器上,观看各种电视剧.电影.综艺节目等内容.里面的大部分视频都是免费的,部分独播大剧可能会存在vip收费的情况,这也是无法避免的.腾讯 ...
- FTP协议中的登录 上传 下载 新建目录 删除目录 的wireshark包分析(一文看完TCP包分析,附源文件,ppt,操作视频)
目录 一原理 二.FTP登录 三.FTP下载 四.FTP上传 五.FTP新建目录 六.FTP删除目录 一原理 前言:TCP/IP四层模型和OSI模型对照,以及FTP在模型中的位置. • ...
- ubuntu下搭建FTP服务器并使用FileZilla上传下载
ubuntu下搭建FTP服务器并使用FileZilla上传下载 为了让实验室同学在共享文件时更加方便,我们决定在实验室电脑上搭建一个FTP服务器,ubuntu系统版本为16.04,下面就是我的搭建流程 ...
- java微信上传本地视频教程_java微信开发之上传下载多媒体文件,java上传下载_PHP教程...
java微信开发之上传下载多媒体文件,java上传下载 回复图片.音频.视频消息都是需要media_id的,这个是需要将多媒体文件上传到微信服务器才有的. 将多媒体文件上传到微信服务器,以及从微信服务 ...
- c#如何通过ftp上传文件_定时上传文件到ftp,2步完成Windows系统定时上传文件到ftp...
FTP能操作任何类型的文件而不需要进一步处理,就像MIME或Unicode一样.但是,FTP有着极高的延时,这意味着,从开始请求到第一次接收需求数据之间的时间,会非常长:并且不时的必须执行一些冗长的登 ...
- c#如何通过ftp上传文件_定时上传文件到ftp,如何使用工具定时上传文件到ftp
IIS7服务器管理工具-FTP客户端 作为FTP客户端,它支持批量管理FTP站点 具体功能: 1.自动重连:2.自动重传:3.定时任务(定时上传.定时下载):4.自定义传输模式.线程.编码:5.删除到 ...
- C++ vs2017 - libcurl - http请求 代码大全(请求数据,上传下载文件,多线程上传下载文件)
在网上搜寻各种libcurl的用法,将代码集合于此! 目录 一.配置curl项目 二.Curl 请求参数 1. CURLOPT_POST 2. CURLOPT_URL 3. CURLOPT_HTTPH ...
- ie11 java 下载文件_Javaweb实现上传下载文件的多种方法
在Javaweb中,上传下载是经常用到的功能,对于文件上传,浏览器在上传的过程中是以流的过程将文件传给服务器,一般都是使用commons-fileupload这个包实现上传功能,因为commons-f ...
- Java实现七牛云文件或图片上传下载
写在前面 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家:人工智能学习网站 文章目录 写在前面 一.准备工作 1.1.为什么选择七牛云? 1.2.七牛云注册 二.ja ...
最新文章
- 转载:vs2010 问题 LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
- pycharm matplotlib.pyplot.figure().add_subplot()绘制三维图时报错:ValueError: Unknown projection 3d(bug)
- 【转】Compile、Make和Build的区别
- 最小生成树——Kruskal(克鲁斯卡尔)算法
- 华为商城抢购工具_华为套路太多,MATE40RS开启摇号模式,抽中资格仍需抢购
- opencv基础:罗德里格斯旋转公式(Rodrigues' rotation formula)推导 rodrigues()函数原理
- Uva(10158)
- ubuntu中使用.rpm
- Java设计模式——GoF设计模式
- Scratch实现打字游戏
- 计算机专业英语常用词汇整理
- 电子实验室仪器使用大全
- linux下qt浏览word文件内容,Qt获取office文件内容
- Android小程序-乐学成语背景音乐(五)
- 汇编基础--cmp汇编指令
- js常用对象:点击、双击、onload事件、鼠标相关、onblur事件和onfocus事件等;通过循环给多个元素添加事件、通过addEventListener() 方法 监听事件函数...
- Levenberg-Marquardt method for nonlinear elliptical equation
- 阿里云搭建博客之如何设置网页为中文
- partitionMagic:nbsp;error27nbsp;cannotnbsp;l…
- 小米 2016届实习生招聘笔试
热门文章
- class触发后让另一个class加样式_Bootstrap的按钮组样式
- UVAoj 348 - Optimal Array Multiplication Sequence
- (四)Linux内核模块化编程
- centos7源码安装mysql报错_CentOS7 下源码安装MySQL数据库 8.0.11
- C++中的虚函数(表)实现机制以及用C语言对其进行的模拟实现
- css 向左白色箭头,带CSS的工具提示左侧的箭头
- ubuntu 改屏幕分辨率命令_Ubuntu被曝严重漏洞!!!
- python爬取微博内容_请问该如何通过python调用新浪微博的API来爬取数据?
- linux系统proc目录,快速了解Linux系统下的proc目录
- 64位ubuntu arm-linux-gcc,在ubuntu 64位的机器上执行arm-linux-gcc提示 no such file or directory【转】...