点击上方蓝字关注我!

图片来源 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相关推荐

  1. 如何在Webstorm/Phpstorm中设置连接FTP,并快速进行文件比较,上传下载,同步等操作...

    Phpstorm除了能直接打开localhost文件之外,还可以连接FTP,除了完成正常的数据传递任务之外,还可以进行本地文件与服务端文件 的异同比较,同一文件自动匹配目录上传,下载,这些功能是平常I ...

  2. 腾讯视频下载安装_如何上传视频到腾讯视频平台

    播放器软件很多,本文小编给大家推荐腾讯视频.我们可以在腾讯视频播放器上,观看各种电视剧.电影.综艺节目等内容.里面的大部分视频都是免费的,部分独播大剧可能会存在vip收费的情况,这也是无法避免的.腾讯 ...

  3. FTP协议中的登录 上传 下载 新建目录 删除目录 的wireshark包分析(一文看完TCP包分析,附源文件,ppt,操作视频)

    ​​​​​​​目录 一原理 二.FTP登录 三.FTP下载 四.FTP上传 五.FTP新建目录 六.FTP删除目录 一原理 前言:TCP/IP四层模型和OSI模型对照,以及FTP在模型中的位置. • ...

  4. ubuntu下搭建FTP服务器并使用FileZilla上传下载

    ubuntu下搭建FTP服务器并使用FileZilla上传下载 为了让实验室同学在共享文件时更加方便,我们决定在实验室电脑上搭建一个FTP服务器,ubuntu系统版本为16.04,下面就是我的搭建流程 ...

  5. java微信上传本地视频教程_java微信开发之上传下载多媒体文件,java上传下载_PHP教程...

    java微信开发之上传下载多媒体文件,java上传下载 回复图片.音频.视频消息都是需要media_id的,这个是需要将多媒体文件上传到微信服务器才有的. 将多媒体文件上传到微信服务器,以及从微信服务 ...

  6. c#如何通过ftp上传文件_定时上传文件到ftp,2步完成Windows系统定时上传文件到ftp...

    FTP能操作任何类型的文件而不需要进一步处理,就像MIME或Unicode一样.但是,FTP有着极高的延时,这意味着,从开始请求到第一次接收需求数据之间的时间,会非常长:并且不时的必须执行一些冗长的登 ...

  7. c#如何通过ftp上传文件_定时上传文件到ftp,如何使用工具定时上传文件到ftp

    IIS7服务器管理工具-FTP客户端 作为FTP客户端,它支持批量管理FTP站点 具体功能: 1.自动重连:2.自动重传:3.定时任务(定时上传.定时下载):4.自定义传输模式.线程.编码:5.删除到 ...

  8. C++ vs2017 - libcurl - http请求 代码大全(请求数据,上传下载文件,多线程上传下载文件)

    在网上搜寻各种libcurl的用法,将代码集合于此! 目录 一.配置curl项目 二.Curl 请求参数 1. CURLOPT_POST 2. CURLOPT_URL 3. CURLOPT_HTTPH ...

  9. ie11 java 下载文件_Javaweb实现上传下载文件的多种方法

    在Javaweb中,上传下载是经常用到的功能,对于文件上传,浏览器在上传的过程中是以流的过程将文件传给服务器,一般都是使用commons-fileupload这个包实现上传功能,因为commons-f ...

  10. Java实现七牛云文件或图片上传下载

    写在前面 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家:人工智能学习网站 文章目录 写在前面 一.准备工作 1.1.为什么选择七牛云? 1.2.七牛云注册 二.ja ...

最新文章

  1. 转载:vs2010 问题 LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
  2. pycharm matplotlib.pyplot.figure().add_subplot()绘制三维图时报错:ValueError: Unknown projection 3d(bug)
  3. 【转】Compile、Make和Build的区别
  4. 最小生成树——Kruskal(克鲁斯卡尔)算法
  5. 华为商城抢购工具_华为套路太多,MATE40RS开启摇号模式,抽中资格仍需抢购
  6. opencv基础:罗德里格斯旋转公式(Rodrigues' rotation formula)推导 rodrigues()函数原理
  7. Uva(10158)
  8. ubuntu中使用.rpm
  9. Java设计模式——GoF设计模式
  10. Scratch实现打字游戏
  11. 计算机专业英语常用词汇整理
  12. 电子实验室仪器使用大全
  13. linux下qt浏览word文件内容,Qt获取office文件内容
  14. Android小程序-乐学成语背景音乐(五)
  15. 汇编基础--cmp汇编指令
  16. js常用对象:点击、双击、onload事件、鼠标相关、onblur事件和onfocus事件等;通过循环给多个元素添加事件、通过addEventListener() 方法 监听事件函数...
  17. Levenberg-Marquardt method for nonlinear elliptical equation
  18. 阿里云搭建博客之如何设置网页为中文
  19. partitionMagic:nbsp;error27nbsp;cannotnbsp;l…
  20. 小米 2016届实习生招聘笔试

热门文章

  1. class触发后让另一个class加样式_Bootstrap的按钮组样式
  2. UVAoj 348 - Optimal Array Multiplication Sequence
  3. (四)Linux内核模块化编程
  4. centos7源码安装mysql报错_CentOS7 下源码安装MySQL数据库 8.0.11
  5. C++中的虚函数(表)实现机制以及用C语言对其进行的模拟实现
  6. css 向左白色箭头,带CSS的工具提示左侧的箭头
  7. ubuntu 改屏幕分辨率命令_Ubuntu被曝严重漏洞!!!
  8. python爬取微博内容_请问该如何通过python调用新浪微博的API来爬取数据?
  9. linux系统proc目录,快速了解Linux系统下的proc目录
  10. 64位ubuntu arm-linux-gcc,在ubuntu 64位的机器上执行arm-linux-gcc提示 no such file or directory【转】...