IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> 三个服务器从第一个服务器上将文件下载到第二个服务器,从第二个服务器上传到第三个服务器,传输完成后自动删除第二个服务器中的文件 -> 正文阅读

[游戏开发]三个服务器从第一个服务器上将文件下载到第二个服务器,从第二个服务器上传到第三个服务器,传输完成后自动删除第二个服务器中的文件

代码如下:

import paramiko
import os
from ftplib import FTP
import paramiko, os
import json
# def callback(current, total):
#     print("文件大小为:{},已经下载了:{}".format(total, current))


# def ssh_download(fromPath, toPath, timeout=120, host='你的第一个服务器的IP地址', port='21', username='你的第一个服务器的用户名', password='你的第一个服务器的密码'):
#     """
#     下载文件操作
#     :param host:主机地址
#     :param port:端口
#     :param username:用户名
#     :param password:密码
#     :param fromPath:文件路径(需要下载的文件)
#     :param toPath:下载至文件路径
#     """
#     client = paramiko.SSHClient()
#     client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
#     client.connect(hostname=host, port=port, username=username, password=password, timeout=timeout)
#
#     sftp_client = paramiko.SFTPClient.from_transport(client.get_transport())
#     print('1111111111111111111111111')
#     sftp_client.get(fromPath, toPath, callback=callback)
#     print('2222222222222222222222')
#     sftp_client.close()
#
#     client.close()

# 下载单个文件
def ftpDownloadFile(ftp, ftpfile, localfile):
    # fid = open(localfile, 'wb') # 以写模式打开本地文件
    bufsize = 1024
    with open(localfile, 'wb') as fid:
        ftp.retrbinary('RETR {0}'.format(ftpfile), fid.write, bufsize)  # 接收服务器文件并写入本地文件
    return True


# 连接ftp服务器
def ftpConnect(ftpserver, port, usrname, password):
	"""
    :param ftpserver:  服务器IP
    :param port:  端口
    :param usrname:  用户名
    :param password:  密码
    :return: 
    """
    ftp = FTP()
    try:
        ftp.connect(ftpserver, port)
        ftp.login(usrname, password)
    except:
        raise IOError('\n FTP connection failed, please check the code!')
    else:
        print(ftp.getwelcome())  # 打印登陆成功后的欢迎信息
        print('\n+------- ftp connection successful!!! --------+')
        return ftp
# 退出ftp连接
def ftpDisConnect(ftp):
    ftp.quit()

def ssh_upload(from_path, to_file_name, ip='你的第三个服务器的IP地址', port=22, username='你的第三个服务器的用户名', password='你的第三个服务器的密码',to_path='/data1/auth-priv/ftper/yxd/2022/1'):
    """
    :param from_path:  要上传的文件路径
    :param to_file_name: 带后缀的文件命(注意不带父级目录)
    :param ip: 服务器的IP地址
    :param port: 服务器的端口
    :param username: 服务器的用户名
    :param password: 服务器的密码
    :param to_path: 要上传的文件的路径(到文件后缀名的父级目录)
    :return:
    """
    transport = paramiko.Transport((ip, port))
    transport.connect(username=username, password=password)
    sftp = paramiko.SFTPClient.from_transport(transport)  # 如果连接需要密钥,则要加上一个参数,hostkey="密钥"
    sftp.put(from_path, os.path.join(to_path, to_file_name))  # 将本地的Windows.txt文件上传至服务器/root/Windows.txt
    sftp.close()
    transport.close()  # 关闭连接


if __name__ == "__main__":
    fromPath = "2022/01/"
    ftpserver = '存储文件的服务器的IP地址(第一个服务器)'
    port = 21 # 端口
    usrname = '' # '第一个服务器的用户名'
    pwd = '' #  '第一个服务器的密码'
    # fromPath = '/2022/01/0003e5bf-33a7-40ad-a485-793ad16af5e3.zip'
    dir_list = os.listdir(fromPath)
    # json.dump([], open('/home/xy/ftper/yxd/2021/record.json', 'w'))

    try:
    	# 防止断网重新下载,用一个数组文件记录已经下载过的,下次可以直接跳过已下载的
        with open('/home/xy/ftper/yxd/2021/record.json', 'r') as f:
            file_name_list = json.load(f)
    except Exception as e:
        file_name_list = []

    for each_dir in dir_list:
        if each_dir not in file_name_list:
            file_name_list.append(each_dir)
            json.dump(file_name_list, open('/home/xy/ftper/yxd/2021/record.json', 'a'))
            ftp = ftpConnect(ftpserver, 21, usrname, pwd)
            # print('name_list \n', '/home/xy/ftper/yxd/2021/'+each_dir.split('/')[-1])
            # print('each_dir \n', each_dir)
            result = ftpDownloadFile(ftp, fromPath+each_dir, '/home/xy/ftper/yxd/2021/'+each_dir.split('/')[-1])
            # print('result \n', result)
            ftpDisConnect(ftp)
            print(each_dir, '下载完成')
            ssh_upload('/home/xy/ftper/yxd/2021/'+each_dir.split('/')[-1], each_dir)
            print(each_dir, '上传已完成')
            os.remove('/home/xy/ftper/yxd/2021/'+each_dir.split('/')[-1])
            print(each_dir, '删除已完成')


  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-04-26 12:08:57  更:2022-04-26 12:09:36 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/16 22:03:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码