zoukankan      html  css  js  c++  java
  • python ftp 上传文件

    # -*- coding: utf-8 -*-

    # 本地bytes 数据上报服务器同时创建文件
    from ftplib import FTP

    import time, _io

    from constant import ftp_host, ftp_port, ftp_pw, ftp_user, ftp_to_path
    from log_cf import logger


    def ftp_connect():
      ftp = FTP()
      # ftp.set_debuglevel(2) #打开调试级别2,显示详细信息
      ftp.connect(ftp_host, ftp_port) # 连接
      ftp.login(ftp_user, ftp_pw) # 登录,如果匿名登录则用空串代替即可
      # ftp.login("", "") # 登录,如果匿名登录则用空串代替即可
      ftp.cwd(ftp_to_path) # 改变ftp的操作目录
      return ftp


    ftp_obj = ftp_connect()  # 只有一个连接, 而不是发送一个文件进行一次连接 


    def send2ftp_server(content): # 默认上传最大数据8192, 分块上传

      # content: bytes

      fp = _io.BufferedReader(_io.BytesIO(content))  # 创建fp 对象, 用于ftp 创建文件
      filename = str(time.time())  # 时间戳做文件名, 自动排序
      tmp_filename = filename + 'tmp'  # 传输为完成的文件
      global ftp_obj  # 使用全局变量, 不多创建连接
      try:
        ftp_obj.storbinary('STOR ' + tmp_filename, fp) # 上传文件
      except Exception as e: # BrokenPipeError  10分钟不用会断开
        print(type(e), e)
        ftp_obj = ftp_connect()
      try:
        ftp_obj.storbinary('STOR ' + tmp_filename, fp) 
      except Exception as e:
        logger.warning("信息上报FTP失败: {}: {}".format(type(e), e))
        return False
      ftp_obj.rename(tmp_filename, filename)
      return True


    def close_ftp():  # 不调用, 不主动断开
      try:
        ftp_obj.quit()
      except Exception as e:
        logger.warning("用ftp.quit()断开链接失败: " + str(e))
        ftp_obj.close() # 服务开启, 连上不断


    if __name__ == '__main__':
      pass

  • 相关阅读:
    测试心得 --基于微信小图书销售小程序
    结对编程总结——by 汪庆祥&尹宗文
    结对编程_队友代码分析
    测试心得:微图书销售小程序
    数据库设计心得
    结对编程之代码互评
    商品销量预测与分析测试 心得
    第一次迭代总结
    结对编程之结对编程总结
    结对编程之队友代码分析
  • 原文地址:https://www.cnblogs.com/520zm/p/10746083.html
Copyright © 2011-2022 走看看