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
最新文章
- artTemplate模板引擎学习实战
- 使用js实现点击按钮下载文件
- Spring的核心机制——依赖注入(Dependency Inject)
- 【技术贴】关闭CMD错误提示声音
- WPF开发技术介绍
- using 1.7 requires using android build tools version 19 or later
- java 语法 java没学好,休想学好安卓!
- Python强大的自省简析
- Java解析JSON文件的方法 (二)
- css3布局属性flex
- 【BZOJ4407】于神之怒加强版(莫比乌斯反演)
- python 备份压缩传输
- iOS-----------设置自定义字体
- spring data jpa 查询自定义字段,转换为自定义实体
- ASP.net MVC模式介绍(一)
- RocketMq(二)消息中间件源码下载、模块分化以及集群模式的认知
- Coursera台大机器学习技法课程笔记14-Radial Basis Function Network
- WDA-FPM-3-SEARCH(OIF)
- Bootstrap-CL:略缩图
- ubuntu16.04安装最新版本的wine