# -*- 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

python ftp 传输文件的更多相关文章

  1. Python+USB+Vnet+FTP传输文件开发记录

    做一个Python+USB+Vnet+FTP传输文件开发记录

  2. mac与windows通过ftp传输文件

    1.两个系统相互传文件,比较通用的方式是用QQ,两台电脑一台各登陆一个qq,发文件就行了,在同一个网段时,qq会自动转换为按局域网的方式传输. 2.本人不愿安装qq,以ftp方式进行传输,先在wndo ...

  3. FTP传输文件被破坏的问题(Linux、Busybox)

    在网络设备上抓包后,通过FTP传输到本机,发现抓包文件破坏.更换tftp后文件正常,定位问题在FTP上. FTP的传输模式有两种:①ASCII  ②二进制 ①ASCII: 以ASCII编码的方式传输文 ...

  4. 在Telnet中用FTP传输文件

    如果用 Telnet 传输文件? 在自己的机子上架设FTP服务器,然后登陆远程机后,就可以登录自己的FTP.利用PUT(上传命令),就可以把远程电脑的文件下载下来.     如果出现连接不上FTP,也 ...

  5. python socket 传输文件

    推荐资料 https://www.cnblogs.com/xiaokang01/p/9865724.html socket传输文件 思路: # 先将报头转换成字符串(json.dumps), 再将字符 ...

  6. 防火墙导致FTP传输文件为0

    在使用 ftpClient 传输文件到FTPserver时,在别的机器上可以正常使用,但是到自己的机器有就始终是0文件,发现是Mcafee 防火墙导致的,只要让防火墙放行即可. Mcafee防火墙的放 ...

  7. FTP传输文件

    感谢其他技术人员的分享.我转发,添加个人使用. public class TransFTP {/// <summary> /// 上传文件 /// </summary> /// ...

  8. WIN7 VMware Ubuntu虚拟机连接secureCRT及ftp传输文件

    一.安装vmware没有问题,网络设置以NAT方式(VMnet8是vmware专属的虚拟网卡).安装完毕后设置虚拟机的 VirtualNetworkEditor(可以再开始->所有程序VMwar ...

  9. Python Socket传输文件

    发送端可以不停的发送新文件,接收端可以不停的接收新文件. 例如:发送端输入:e:\visio.rar,接收端会默认保存为 e:\new_visio.rar,支持多并发,具体实现如下: 接收端: 方法一 ...

随机推荐

  1. 使用Pycharm创建Django项目

    一.安装django pip install django 二.创建空django项目 选择New Project...打开创建项目向导. 成功创建一个空Django项目. 创建好的项目可以看到,已经 ...

  2. 容器(docker)内运行Nginx

    容器内运行nginx其实很简单,但是一开始还是浪费了我很多时间.这里写下来给大家省点时间. 1.创建nginx文件夹,放置各种配置及日志等. mkdir /docker/nginx docker 文件 ...

  3. Springboot+ mybatis+ mysql配置@Slf4j

    spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver # 驱动 name: testDB # 配置名,可以随便写 userna ...

  4. CentOS使用nginx部署https服务

    nginx安装参考:https://www.cnblogs.com/taiyonghai/p/6728707.html 自签证书生成参考:https://gmd20.github.io/blog/op ...

  5. 应用MySQL(开启远程登录权限)

    参考“开启MySQL远程访问权限 允许远程连接”.

  6. HTML5 加密和摘要算法(base64,md5, sha1,rsa)

    < 一 > BASE64 1,Base64 是网络上最常见的用于传输 8Bit 字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法 2,首先需要一个库 b ...

  7. PHP SoapClient 调用与鉴权,以及对Java和C# 的webservice的兼容处理

    SoapClient使用注意事项: 第一要加上 cache_wsdl参数,以防服务器调用的是缓存的wsdl文件 然后是参数传递,如果是使用PHP自己写的WebService,参数传递按正常方式即可 1 ...

  8. python之路:数据类型初识

    python开发之路:数据类型初识 数据类型非常重要.不过我这么说吧,他不重要我还讲个屁? 好,既然有人对数据类型不了解,我就讲一讲吧.反正这东西不需要什么python代码. 数据类型我讲的很死板.. ...

  9. v-for key

    key 当 Vue.js 用 v-for 正在更新已渲染过的元素列表时,它默认用“就地复用”策略.如果数据项的顺序被改变,Vue 将不会移动 DOM 元素来匹配数据项的顺序, 而是简单复用此处每个元素 ...

  10. Habits of Considerate People

    Habits of Considerate People体贴人的八种习惯哲学家亚瑟·叔本华曾经说过:“蜡之可贵,在于燃烧自己温暖他人,人之可贵,在于屈尊敬贤彬彬有礼”,事实的确如此.善意与体贴能够抚慰 ...