zoukankan      html  css  js  c++  java
  • ftplib实现FTP上传与下载的功能

    FTP server默认的端口号为21,20端口用于数据传输。

    本文参考地址:https://docs.python.org/3.6/library/ftplib.html

    1. ftplib里包含FTP和FTP_TLS两个class,后者是封装了TLS安全传输协议的FTP,本文不多描述,查看官网即可,很简单。

    2. ftplib.FTP class就是一个模拟FTP协议客户端的class,可以使用此class与FTP server进行各种交互,如数据上传和下载等。

    3. FTP的数据传输有两种模式ASCII和binary格式,一般来说使用binary格式更加的普遍,适用场景较多。也因此FTP class最常用的四个method其实是:

    • FTP.storbinary(cmd, fp, blocksize=8192, callback=None, rest=None)
    • FTP.storlines(cmd, fp, callback=None)
    • FTP.retrbinary(cmd, callback, blocksize=8192, rest=None)
    • FTP.retrlines(cmd, callback=None)

    其中storbinary与retrbinary就是进行二进制数据传输的method。

    FTP数据下载:

    一般来说,生产上会将ftp用户的访问权限限定在自己的家目录下(可通过修改/etc/vsftpd.conf来改变此行为模式)。

    # The FTP class supports the with statement, e.g.:
    from ftplib import FTP
    with FTP('<ftp server IP>','user','passwd') as c,
    	open('<local filename/fullpath_filename>','wb') as f:
    	c.retrbinary('RETR <remote ftpserver filename>',f.write)
    # 直接使用host,user,passwd参数初始化FTP,相当于执行了FTP.connect().login(),简便起见一般不这么麻烦的写
    # f.closed为True可知文件已自动关闭
    

    FTP class支持python context的with语法,此语法在python中是普遍推荐的,可以帮你自动处理相关对象的上下文,也就是说可以帮你自动关闭相关的对象,防止自己忘了quit or close。

    retr开头的两个method主要参数是cmd和callback,前者是获取文件的命令,格式为“RETR filename”,后者即callback为回调函数,一般为openfile.write,表示将相关数据流写入一个打开的文件,文件打开的方式取决于使用的retr method,例如retrbinary()可以使用'wb'打开的文件。

    FTP数据上传:

    相应的数据上传的函数就是以stor开头的两个函数:storbinary与storlines,依然推荐使用前者,二进制总是比较受信任的。

    from ftplib import FTP
    with FTP('<ftp server IP>','user','passwd') as c,
    	open('<remote ftpserver filename>','wb') as f:
    	c.storbinary('STOR <local filename/fullpath_filename>',f)
    

    同样的,上传文件的CMD格式为“STOR 文件名”。

    需要注意的是retr函数使用的是callback函数来将要下载的文件写入到本地open的文件中,而stor函数则在server端打开一个文件,然后将要上传的数据写入。

    其他:

    关于FTP server常见的returncode,参考:https://kb.globalscape.com/Knowledgebase/10142/FTP-Status-and-Error-Codes

  • 相关阅读:
    c++ 为自定义类添加stl遍历器风格的遍历方式
    C++ 生成随机数
    c/c++ 函数说明以及技巧总结
    XSLT 教程
    C# 高效过滤DataTable 中重复数据方法
    xml获取指定节点的路径
    TreeView控件
    推荐一些C#相关的网站、资源和书籍
    C#多线程操作
    C#二进制序列化
  • 原文地址:https://www.cnblogs.com/leohahah/p/12704292.html
Copyright © 2011-2022 走看看