#-*- coding:utf-8 -*-
#author:lhj588@live.cn
#C_Date: 2011.11.17
from ftplib import FTP
import socket
import os
#ftp服务器地址
ftp_server = '127.0.0.1'
#ftp服务器端口
ftp_port ='5433'
#ftp服务器登录名称
user_name = 'lhj588'
#ftp服务器登录密码
password = '888888'


"""
描述:描述:简单FTP文件下载
"""
def upload_ftp():
    ftp = FTP()
    #打开调试级别2,显示详细信息
    ftp.set_debuglevel(2)
    #连接FTP服务器
    ftp.connect(ftp_server,ftp_port)
    #登录FTP服务器  如果匿名登录则用空串代替即可
    ftp.login(user_name,password)

    #显示FTP服务器欢迎信息
    print ftp.getwelcome()

    dir_name = "/mysoft/tool/"
    #选择要上传文件存放服务器的目录
    ftp.cwd(dir_name)
    #设置缓冲块大小
    buf_size = 1024
    #文件名称
    file_name = "test.jpg"
    #以写模式在本地打开文件
    f_handler = open(file_name,'wb').write()
    #接收FTP服务器上文件并写入本地
    ftp.retrbinary("RETR test.jpg",f_handler,buf_size)
    #关闭调试
    ftp.set_debuglevel(0)
    #退出FTP服务器
    ftp.quit()
"""
描述:简单FTP文件上传
"""
def down_ftp():
    ftp = FTP()
    #打开调试级别2,显示详细信息
    ftp.set_debuglevel(2)
     #连接FTP服务器
    ftp.connect(ftp_server,ftp_port)
    #登录FTP服务器  如果匿名登录则用空串代替即可
    ftp.login(user_name,password)
    print ftp.getwelcome()
    dir_name = "/mysoft/tool/"
    ftp.cwd(dir_name)
    buf_size = 1024
    file_name = 'test.jpg'
    #以读模式在本地打开文件
    f_handler = open(file_name,'rb')
    #上传文件
    ftp.storbinary('STOR server_test.jpg',f_handler,buf_size)
    #关闭调试
    ftp.set_debuglevel(0)
    #关闭文件
    f_handler.close()
    #退出FTP服务器
    ftp.quit()

"""
描述:登录到FTP站点:ftp_server,并到tarDirTemp目录下下载fileNameTempList列表中的文件
参数:ftp_server:ftp站点名称   user_name:ftp登录名   password:ftp密码
      tarDirTemp:下载的目标绝对目录   fileNameTempList:要下载的文件全名列表
返回值:输出:成功:0 失败:1
"""
def down_ftp_file(ftp_server, user_name, password, tarDirTemp,fileNameTempList):
    try:
        ftp = FTP(ftp_server)
        ftp.login(user_name, password)
        ftp.cwd(tarDirTemp)
        ftp.set_debuglevel(2)
    except socket.error as errobj:
        print 'fpt error: %s can\'t download directory\'s file %s' % (errobj, tarDirTemp)
        return False

    for filename in fileNameTempList:
        try:
            #以写模式在本地打开文件
            fp = open(filename, 'wb')
            #从FTP中下载文件
            ftp.retrbinary('RETR '+filename, fp.write, 1024)
        except IOError as ioerr:
            print 'Error: [%s] %s' % (ioerr.errno, ioerr.strerror)
            return False
        except FTP.all_errors as errobj:
            print 'fpt error: [%s] %s' % (errobj, filename)
            if os.path.isfile(filename):
                os.system('rm -f ' + filename)
            continue
    ftp.close()
    return True

"""
描述:测试方法
"""
if __name__=="__main__":
    upload_ftp()
    down_ftp()
    down_ftp_file(ftp_server,user_name,password,"/mysoft/tool/",['1.jpg','2.jpg','3.jpg'])