# -*- coding:utf-8 -*-
from pyftpdlib.authorizers import DummyAuthorizer
from pyftpdlib.handlers import FTPHandler
from pyftpdlib.servers import FTPServer
# 實例化DummyAuthorizer來建立ftp用戶
authorizer = DummyAuthorizer()
# 參數:用戶名,密碼,目錄,權限
authorizer.add_user('admin', '123456', r'C:\Users\Administrator\Desktop\ftp', perm='elradfmwMT')
# 匿名登陸
# authorizer.add_anonymous('/home/nobody')
handler = FTPHandler
handler.authorizer = authorizer
# 參數:IP,端口,handler
server = FTPServer(('0.0.0.0', 2121), handler) #設置爲0.0.0.0爲本機的IP地址
server.serve_forever()
函數釋義html
Python中默認安裝的ftplib模塊定義了FTP類,其中函數有限,可用來實現簡單的ftp客戶端,用於上傳或下載文件,函數列舉以下python
ftp登錄鏈接
from ftplib import FTP #加載ftp模塊
ftp=FTP() #設置變量
ftp.set_debuglevel(2) #打開調試級別2,顯示詳細信息
ftp.connect("IP","port") #鏈接的ftp sever和端口
ftp.login("user","password") #鏈接的用戶名,密碼
print ftp.getwelcome() #打印出歡迎信息
ftp.cmd("xxx/xxx") #進入遠程目錄
bufsize=1024 #設置的緩衝區大小
filename="filename.txt" #須要下載的文件
file_handle=open(filename,"wb").write #以寫模式在本地打開文件
ftp.retrbinaly("RETR filename.txt",file_handle,bufsize) #接收服務器上文件並寫入本地文件
ftp.set_debuglevel(0) #關閉調試模式
ftp.quit() #退出ftp
ftp相關命令操做
ftp.cwd(pathname) #設置FTP當前操做的路徑
ftp.dir() #顯示目錄下全部目錄信息
ftp.nlst() #獲取目錄下的文件
ftp.mkd(pathname) #新建遠程目錄
ftp.pwd() #返回當前所在位置
ftp.rmd(dirname) #刪除遠程目錄
ftp.delete(filename) #刪除遠程文件
ftp.rename(fromname, toname)#將fromname修更名稱爲toname。
ftp.storbinaly("STOR filename.txt",file_handel,bufsize) #上傳目標文件
ftp.retrbinary("RETR filename.txt",file_handel,bufsize) #下載FTP文件
FTP.quit()與FTP.close()的區別linux
# -*- coding: utf-8 -*-
from ftplib import FTP
import time,tarfile,os
#鏈接ftp
def ftpconnect(host,port, username, password):
ftp = FTP()
# 打開調試級別2,顯示詳細信息
# ftp.set_debuglevel(2)
ftp.connect(host, port)
ftp.login(username, password)
return ftp
#從ftp下載文件
def downloadfile(ftp, remotepath, localpath):
# 設置的緩衝區大小
bufsize = 1024
fp = open(localpath, 'wb')
ftp.retrbinary('RETR ' + remotepath, fp.write, bufsize)
ftp.set_debuglevel(0)# 參數爲0,關閉調試模式
fp.close()
#從本地上傳文件到ftp
def uploadfile(ftp, remotepath, localpath):
bufsize = 1024
fp = open(localpath, 'rb')
ftp.storbinary('STOR ' + remotepath, fp, bufsize)
ftp.set_debuglevel(0)
fp.close()
if __name__ == "__main__":
#host,port, username, password
ftp = ftpconnect("192.168.10.113", 2121,"admin", "123456")
#下載文件,第一個是ftp服務器路徑下的文件,第二個是要下載到本地的路徑文件
downloadfile(ftp, "/12.mp3", r"C:\Users\Administrator\Desktop\ftp\download\test.mp3")
# 上傳文件,第一個是要上傳到ftp服務器路徑下的文件,第二個是本地要上傳的的路徑文件
uploadfile(ftp, '/upload/1.txt', "C:/Users/Administrator/Desktop/1.txt")
# ftp.close() #關閉ftp
# #調用本地播放器播放下載的視頻
# os.system('start D:\soft\kugou\KGMusic\KuGou.exe C:\Users\Administrator\Desktop\ftp\test.mp3')
print(ftp.getwelcome())# 打印出歡迎信息
# 獲取當前路徑
pwd_path = ftp.pwd()
print("FTP當前路徑:", pwd_path)
# 顯示目錄下全部目錄信息
# ftp.dir()
# 設置FTP當前操做的路徑
ftp.cwd('/upload/')
# 返回一個文件名列表
filename_list = ftp.nlst()
print(filename_list)
ftp.mkd('目錄名')# 新建遠程目錄
ftp.rmd('目錄名') # 刪除遠程目錄
ftp.delete('文件名') # 刪除遠程文件
ftp.rename('fromname', 'toname') # 將fromname修更名稱爲toname
# 逐行讀取ftp文本文件
file = '/upload/1.txt'
# ftp.retrlines('RETR %s' % file)
#與 retrlines()相似,只是這個指令處理二進制文件。回調函數 cb 用於處理每一塊(塊大小默認爲 8KB)下載的數據
# ftp.retrbinary('RETR %s' % file)
FTP對象方法說明web
參考:https://www.cnblogs.com/hltswd/p/6228992.html服務器
緣由:在於此語句ftp.set_pasv()svg
Window下設置ftp爲主/被動模式,ftp.retrlines()方法不會出現錯誤,Linux 下只能ftp爲主動模式才能夠。函數
解決方法:把ftp_ftp.set_pasv(val=False)的val設置爲False,即設置爲主動模式便可。ui
ftp參數設置連接:https://docs.python.org/3/library/ftplib.html#ftplib.FTP.set_pasvspa