该功能为通过前端上传文件,后端通过ftp将文件传至另一台配置好ftp的windows电脑上。(windows的ftp配置)部署服务的服务器和存文件的服务器不是一台,所以没有把文件存到工程目录下static里面。
后端代码如下:
@api.route('/upload_source_file', methods=['POST', 'GET'])
def upload_source_file():
# 文件信息准备
files = request.files['file']
filename = os.path.splitext(files.filename)[0]
postfix = os.path.splitext(files.filename)[1]
hostname = 'xx.xx.xx.xxx'
username = 'administrator'
password = 'xxxxxxxxx'
port = 21
reload(sys)
sys.setdefaultencoding('utf-8')
try:
# 连接远程ftp创建文件并上传
ftp = FTP()
ftp.connect(hostname, port)
ftp.login(username, password)
# 判断目录里面是否有该文件夹
if filename in ftp.nlst():
# 进入该目录
ftp.cwd(filename)
# 如果存在,则在该文件夹存入,以时间唯一命名
unique_name = str(datetime.now().strftime('%Y-%m-%d')) + '-' + filename + postfix
ftp.storbinary('STOR %s' % unique_name, files)
ftp.close()
else:
ftp.mkd(filename)
ftp.cwd(filename)
unique_name = str(datetime.now().strftime('%Y-%m-%d')) + '-' + filename + postfix
ftp.storbinary('STOR %s' % unique_name, files)
ftp.close()
try:
number = len(db.session.query(Source).all())
source = db.session.query(Source).filter(Source.number == number).first()
source.net_server = 'ftp://xx.xx.xx.xxx/%s/%s' % (filename, unique_name)
db.session.add(source)
db.session.commit()
except Exception as e:
print e
db.session.rollback()
return jsonify(status_code.ADD_NET_SERVER_ERROR)
return jsonify(status_code.SUCCESS)
except Exception as e:
print e
return jsonify(status_code.FTP_TRANSFER_ERROR)
其原理就是通过搭建的ftp,通过在浏览器输入的ip地址加文件夹及文件名便可下载相应文件,然后在前端做一个a标签即可下载。