Python - 动态创建txt文件并通过FTP发送?

时间:2016-07-27 16:12:58

标签: python ftp

所以我目前正在使用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)

2 个答案:

答案 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()