python ftp下载文件_文件上传下载Python

点击上方蓝字关注我!

9195996c94e6628061d541777f2c6fa0.png

2e67f14926047e08e003c01d7f809315.png

图片来源 pexels.com

bb1726998241ca5a8d5982f45e0d8225.png

简单实现文件上传、下载

b1a6a3fc1589f9728ec1452d3ba3bd79.png

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()
3f08b906bbc69c5ca6136cdf70efe2a7.png

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-----------------------   

d3be431f9027b176cea4a54a3396d348.png

扫码关注 获取更多

9fd09d566334ab371570ebc893c8d245.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/539198.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

react json转换_Typescript + React 新手篇

极链科技前端工程师茅丹丹前言 TS是什么Type Type (标准JS)。TS的官方网站&#xff1a;Type is a typed superset of Java that compiles to plain Java。Type是一个编译到纯JS的有类型定义的JS超集。 TS优点 TS 最大的优势是它提供了强大的静态分析能力&#xff0c;结合 TSL…

android listview 滑动条显示_第七十六回:Android中UI控件之RecyclerView基础

各位看官们&#xff0c;大家好&#xff0c;上一回中咱们说的是Android中UI控件之ListView优化的例子&#xff0c;这一回咱们说的例子是UI控件之RecyclerView。闲话休提&#xff0c;言归正转。让我们一起Talk Android吧&#xff01;看官们&#xff0c;我们在前面章回中介绍了Lis…

Hive的数据模型-外部表

概述 包含External 的表叫外部表 删除外部表只删除metastore的元数据&#xff0c;不删除hdfs中的表数据 外部表 只有一个过程&#xff0c;加载数据和创建表同时完成&#xff0c;并不会移动到数据仓库目录中&#xff0c;只是与外部数据建立一个链接。当删除一个 外部表 时&…

centos默认安装mysql_centos6.x默认安装mysql5.7

1. yum 安装 mysql5.7 yum 源yum localinstall mysql57-community-release-el6-8.noarch.rpm2. 查看是否成功安装MySQL Yum Repositoryyum repolist enabled|grep ""mysql.*-community.*3. 安装mysqlyum install mysql-community-server4.开启数据库服务service mys…

Hive的数据模型-分区表

需求 select * from t1 where xxxx; 这是全表扫描的。实际应用中&#xff0c;有时候不一定需要全表扫描。 比如电信的日志文件&#xff0c;一个表里存了从去年到现在的日志文件&#xff0c;那是很多很大的&#xff0c;实际需求要查今天的&#xff0c;如果用上面的sql&#xf…

arduino 停止程序_建立Arduino机器人,第五部分:障碍规避

欢迎阅读教程系列的第五篇文章&#xff0c;其中我正在构建一个基于遥控Arduino的车辆机器人。这是我到目前为止发表的文章列表&#xff1a;第一部分&#xff1a;硬件组件第二部分&#xff1a;Arduino编程第三部分&#xff1a;组装机器人第四部分&#xff1a;A(不是那样)基本机器…

Yarn简单介绍及内存配置

在这篇博客中&#xff0c;主要介绍了Yarn对MRv1的改进&#xff0c;以及Yarn简单的内存配置和Yarn的资源抽象container。我么知道MRv1存在的主要问题是&#xff1a;在运行时&#xff0c;JobTracker既负责资源管理又负责任务调度&#xff0c;这导致了它的扩展性、资源利用率低等问…

mysql计算时间函数_mysql时间计算函数

当前一个业务需求&#xff0c;需要查找创建在三天以前的数据&#xff0c;表中是存了一个创建时间的&#xff1b;这个需求看起来很简单&#xff0c;直接全部查找出来然后用代码根据时间筛选一下就可以了。但这只是适用于数据量不大的情况下&#xff0c;如果数据量大&#xff0c;…

html上传文件_.NET基于WebUploader大文件分片上传、断网续传、秒传

(给DotNet加星标&#xff0c;提升.Net技能)转自&#xff1a;学习中的苦与乐cnblogs.com/xiongze520/p/10412693.html现在的项目开发基本上都用到了上传文件功能&#xff0c;或图片&#xff0c;或文档&#xff0c;或视频。我们常用的常规上传已经能够满足当前要求了&#xff0c;…

Hadoop运行任务时一直卡在: INFO mapreduce.Job: Running job

原文链接&#xff1a;http://blog.csdn.net/dai451954706/article/details/50464036 ----------------------------------------------------------------------------------------------------- 今天&#xff0c;一大清早同事就让我帮他解决Hive的问题&#xff1a;他在Hive中…

git切换用户密码_Git 最基本的命令

本人比较懒&#xff0c;不是很爱学习新东西&#xff0c;之前用Git一直在用GUI SourceTree&#xff0c;今天因为用到Cloud IDEGitHub才迫不得已用一下Git的命令行&#xff0c;如果你是Git的新手&#xff0c;也分享给你最基本的命令。新建一个Git版本库把一个本地文件夹变成一个G…

动态分区装载数据

不开启 一个个分区导入&#xff0c;分区需要做到一对一。 hive (zmgdb)> insert overwrite table p_t3 partition (cityningbo) > select name,post,address from p_t1 where cityningbo; 会启动mapreduce进行导入&#xff0c;mr卡在kill job_xxxx&#…

AI造福设计师:搭配色板这种苦差事交给GAN就好啦(教程)

本文来自AI新媒体量子位&#xff08;QbitAI&#xff09;设计师要开工&#xff0c;总是离不开配色方案&#xff0c;也就是色板。 不过&#xff0c;做色板可不是个简单的活&#xff0c;色板生成器Colormind的作者Jack Qiao&#xff08;名字来自Product Hunt&#xff0c;我们下面叫…

mapreduce yarn内存参数

1、yarn-site.xml 设置 1.1 RM设置 RM的内存资源配置&#xff0c;主要是通过下面的两个参数进行的&#xff08;这两个值是Yarn平台特性&#xff0c;应在yarn-sit.xml中配置好&#xff09;&#xff1a; yarn.scheduler.minimum-allocation-mb yarn.scheduler.maximum-allocati…

html网页设计大赛_HTML5网页设计大赛 || 决赛名单公布

历经数日的HTML5网页设计大赛初赛已经落下的帷幕激动人心的决赛即将开始你们准备好了吗&#xff1f;①决赛名单在经过评委老师多轮评选后,有以下队伍/(个人)脱颖而出进入决赛&#xff1a;1.施佳镛_故宫旅游网2.王永校_神秘莫测的宇宙3.黄炜岳_广州旅游网站4.吴贵滨_NameLess5.陈…

Hive的数据模型—桶表

概述 桶表是对数据进行哈希取值&#xff0c;然后放到不同文件中存储。 数据加载到桶表时&#xff0c;会对字段取hash值&#xff0c;然后与桶的数量取模。把数据放到对应的文件中。 物理上&#xff0c;每个桶就是表(或分区&#xff09;目录里的一个文件&#xff0c;一个作业产…

delphi bmp绘制矢量文件效率慢_聊一聊矢量瓦片的常识

一、矢量瓦片的基本原理和相关格式现阶段&#xff0c;电子地图瓦片主要使用两种方式&#xff0c;一种是传统的栅格瓦片&#xff0c;另外一种是新出的矢量瓦片(Vector Tiles)&#xff0c;前者是采用四叉树金字塔模型的分级方式&#xff0c;将地图切割成无数大小相等的矩形栅格图…

python生成器与迭代器。

生成器 在python 中一边循环一边计算的机制&#xff0c;叫做生成器(generator)。 通过列表生成式&#xff0c;我们可以直接创建一个列表。但是&#xff0c;收到内存的限制&#xff0c;列表容量肯定是有限的。而且&#xff0c;创建一个包含100万个元素的列表&#xff0c;不仅占用…

python怎样将list转化成字典_在python 中如何将 list 转化成 dictionary

原标题&#xff1a;在python 中如何将 list 转化成 dictionary 问题1&#xff1a;如何将一个list转化成一个dictionary&#xff1f; 问题描述&#xff1a;比如在python中我有一个如下的list&#xff0c;其中奇数位置对应字典的key&#xff0c;偶数位置为相应的value解决方案: 1…

vscode gcc debug dbg gdb c cpp c++ cuckoo monitor

为什么80%的码农都做不了架构师&#xff1f;>>> 装cygwin 或者mingGW&#xff0c;装gcc工具链&#xff0c;并将cygwin的bin目录加入环境变量PATH中。 ctrlshiftb {// See https://go.microsoft.com/fwlink/?LinkId733558// for the documentation about the tasks…