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

  • 相关阅读:
    Redis 之服务器集群配置
    Redis 之持久化(rdb、aof)
    Redis 之消息发布与订阅(publish、subscribe)
    Redis事物及锁的运用
    Redis 之hash集合结构及命令详解
    对Ul下的li标签执行点击事件——如何获取你所点击的标签
    .net 面试题(3)
    SQL Server 系统时间
    分布式内存对象缓存 memcached
    MVC 模板页和布局
  • 原文地址:https://www.cnblogs.com/520zm/p/10746083.html
Copyright © 2011-2022 走看看