#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
FTP常用操作
"""
from ftplib import FTP
import os
class FTP_OP(object):
def __init__(self, host, username, password, port):
"""
初始化ftp
:param host: ftp主机ip
:param username: ftp用户名
:param password: ftp密码
:param port: ftp端口 (默认21)
"""
self.host = host
self.username = username
self.password = password
self.port = port
self.ftp = FTP()
self.ftp_connect()
def __del__(self):
self.ftp.close()
def ftp_connect(self):
"""
连接ftp
:return:
"""
self.ftp.set_debuglevel(1) # 不开启调试模式
self.ftp.connect(host=self.host, port=self.port) # 连接ftp
self.ftp.login(self.username, self.password) # 登录ftp
self.ftp.set_pasv(False)##ftp有主动 被动模式 需要调整
return self.ftp.getwelcome()
def download_file(self, ftp_file, dst_file):
"""
从ftp下载文件到本地
:param ftp_file_path: ftp下载文件路径
:param dst_file_path: 本地存放路径
:return:
"""
buffer_size = 102400 #默认是8192
# ftp = self.ftp_connect()
print(self.ftp.getwelcome() ) #显示登录ftp信息
with open(dst_file, "wb") as f:
self.ftp.retrbinary('RETR %s' % ftp_file, f.write, buffer_size)
#f.close()
# ftp.quit()
if __name__ == '__main__':
host = "192.168.3.20"
username = "data"
password = "data"
port = 21
ftp_file_path = "videoservice.run" #FTP目录
dst_file_path = "videoservice.run" #本地目录
ftp = FTP_OP(host=host, username=username, password=password, port=port)
ftp.download_file(ftp_file=ftp_file_path, dst_file=dst_file_path)
import ftplib
if __name__ == "__main2__":
# app = QtWidgets.QApplication(sys.argv)
# 连接FTP服务器
ftp = ftplib.FTP('192.168.3.20')
ftp.login('data', 'data')
ftp.set_pasv(False)
ftp.set_debuglevel(1)
# 上传文件
localrdfp = open('test.jpg', 'rb')
ftp.storbinary('STOR test.jpg',localrdfp )
# 下载文件
localwrfp = open('00000001.tif', 'wb')
ftp.retrbinary('RETR videoservice.run',localwrfp.write,102400 )
# 关闭FTP连接
ftp.quit()
# app.exec()
测试的过程中 ftp.retrbinary('RETR videoservice.run',localwrfp.write,102400 ) 的后两个参数比较重要,没写对的话会错误
ftp.getwelcome() 可以作为ftp是否连上的测试条件