所以我目前正在使用jinja2模板创建一个文本文件,并由用户浏览器下载,但是我想添加一个选项,通过FTP将其发送到某个地方(所有FTP细节都是预定义的,不会更改) 如何创建要发送的文件?
由于
代码:
...
device_config.stream(
STR = hostname,
IP = subnet,
BGPASNO = bgp_as,
LOIP = lo1,
DSLUSER = dsl_user,
DSLPASS = dsl_pass,
Date = install_date,
).dump(config_file)
content = config_file.getvalue()
content_type = 'text/plain'
content_disposition = 'attachment; filename=%s' % (file_name)
response = None
if type == 'FILE':
response = HttpResponse(content, content_type=content_type)
response['Content-Disposition'] = content_disposition
elif type == 'FTP':
with tempfile.NamedTemporaryFile() as temp:
temp.write(content)
temp.seek(0)
filename = temp.name
session = ftplib.FTP('192.168.1.1','test','password')
session.storbinary('STOR {0}'.format(file_name), temp)
session.quit()
temp.flush()
return response
需要在发送文件
之前添加temp.seek(0)答案 0 :(得分:2)
您可以使用tempfile
模块创建命名的临时文件。
import tempfile
with tempfile.NamedTemporaryFile() as temp:
temp.write(content)
temp.flush()
filename = temp.name
session.storbinary('STOR {0}'.format(file_name), temp)
答案 1 :(得分:0)
以下是在BytesIO
模块下使用io
的工作示例。代码经过测试并有效。
import ftplib
import io
session = ftplib.FTP('192.168.1.1','USERNAME','PASSWORD')
# session.set_debuglevel(2)
buf=io.BytesIO()
buf.write("test string")
buf.seek(0)
session.storbinary("STOR testfile.txt",buf)
session.quit()