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.pswp.cn/news/539198.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/539198.shtml
英文地址,請注明出處:http://en.pswp.cn/news/539198.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

hive列定義

修改 列的名稱、類型、位置、注釋 hive>ALTER TABLE t3 CHANGE COLUMN old_name new_name String [COMMENT ...] [AFTER column2]; 實例 hive (zmgdb)> alter table t1 change column car sarly int after office; FAILED: Execution Error, return code 1 from org.a…

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…

數據建模大數據就業挑戰月薪30K

點擊關注 異步圖書&#xff0c;置頂公眾號每天與你分享 IT好書 技術干貨 職場知識本文大概 10624 字讀完共需 30 分鐘Tips 參與文末話題討論&#xff0c;即有機會獲得異步圖書一本。數據建模是對現實世界各類數據進行抽象組織、界定數據庫需管轄的范圍、確定數據的組織形式等直…

Hive的數據模型-管理表

概述 管理表&#xff0c;也稱作內部表,受控表。 所有的 Table 數據&#xff08;不包括 External Table&#xff09;都保存在warehouse這個目錄中。 刪除表時&#xff0c;元數據與數據都會被刪除。 在加載數據的過程中&#xff0c;實際數據會被移動到數據倉庫目錄中&#xff1b…

mft按鈕設計_火力發電廠典型MFT邏輯控制實現.pdf

火力發電廠典型MFT邏輯控制實現.pdf火力發電廠典型MFT邏輯控制實現劉文豐 陳思銘湖南省電力試驗研究院 (湖南長沙410007)摘要&#xff1a;以金竹山電廠擴建工程國產2600MW亞臨界機組為例&#xff0c;概述了必力發電廠FSSS中典型MFT的原理及重要性&#xff0c;詳細介紹各MFT條件…

oracle schema_oracle數據庫全局統計更新

--oracle數據庫優化 替換用戶名 user&#xff0c;在該用戶下執行begindbms_stats.gather_schema_stats(ownname >USER,options > GATHER,estimate_percent > dbms_stats.auto_sample_size,method_opt > for all columns size skewonly,degree > 7 );end;————…

python操作三大主流數據庫(12)python操作redis的api框架redis-py簡單使用

python操作三大主流數據庫(12)python操作redis的api框架redis-py簡單使用 redispy安裝安裝及簡單使用&#xff1a;https://github.com/andymccurdy/redis-pyapi參考文檔&#xff1a;http://redis-py.readthedocs.io/en/latest/ 1.安裝redis-py pip install redis C:\Users\ajie…

Hive的數據模型-外部表

概述 包含External 的表叫外部表 刪除外部表只刪除metastore的元數據&#xff0c;不刪除hdfs中的表數據 外部表 只有一個過程&#xff0c;加載數據和創建表同時完成&#xff0c;并不會移動到數據倉庫目錄中&#xff0c;只是與外部數據建立一個鏈接。當刪除一個 外部表 時&…

對github的初步認識以及對軟件技術基礎課程的期待

對github的初步認識&#xff1a; Git是一個開源的分布式版本控制系統&#xff08;版本控制是一種記錄一個或若干文件內容變化&#xff0c;以便將來查閱特定版本修訂情況的系統&#xff09;&#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(不是那樣)基本機器…

debug error怎么解決_我要以血和淚的經歷告訴你,這個 bug 太難解決了

[npm install報錯: npm WARN tar ENOENT: no such file or directory]npm installnpm WARN deprecated request2.88.2: request has been deprecated, see request/request#3142npm WARN deprecated mkdirp0.5.1: Legacy versions of mkdirp are no longer supported. Please u…

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&#…