• 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

  • 相关阅读:
    隐私政策
    常用SQL语句总结
    C++读写配置项
    GridControl中事件
    DEV ListBoxControl
    DEV LookUpEdit 下拉框
    DataTable GridControl 数据结构
    django + celery + channels.websocket 异步任务
    微信消息推送,获取access_token时AppSecret错误或者access_token无效 invalid credential, access_token is invalid or not latest rid
    sqlserver 表生成实体类
  • 原文地址:https://www.cnblogs.com/520zm/p/10746083.html
Copyright © 2020-2023  润新知