如何将文件附在从Flask表格收到的Flask邮件上?

2024-04-26 07:37:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用Python Flask开发一个网站。我要做的是把上传的文件放在一个表格里,然后把它附在邮件上。我尝试过类似问题中给出的解决方案,但它给出了以下错误:

AttributeError: 'str' object has no attribute 'filename'

我做错什么了?我是Python和烧瓶的初学者。 我的代码是:

class UploadForm(Form):
    branch = StringField('branch', validators = [DataRequired()])
    year = StringField('year', validators = [DataRequired()])
    sub = StringField('sub', validators = [DataRequired()])
    paper = FileField('Logo', validators = [Required()])

def uploadPaper(form):
    msg = Message('New upload request', sender = ADMINS[0], recipients = ADMINS)
    msg.body = 'text body'
    msg.html = 'Branch: ' + form.branch.data + '<br />' + 'Year: ' + form.year.data + '<br />' + 'Subject: ' + form.sub.data
    msg.attach(form.paper.data.filename, 'application/octect-stream', form.paper.data.read())
    with app.app_context():
        mail.send(msg)
    return "success"

我正在调用uploadPaper()函数来验证表单。在


Tags: brformbranchappdatabodymsgfilename
1条回答
网友
1楼 · 发布于 2024-04-26 07:37:30

好吧,这个错误意味着你试图从一个字符串中读取一个文件。在

AttributeError: 'str' object has no attribute 'filename'

这是因为uploadPaper()函数返回的是字符串(或“str”)而不是“file”对象。由于Python是面向对象的,所以脚本可能试图从file对象读取“filename”属性。在

我还可以在你的函数中看到,有一个对象具有你想要使用的属性,这里是

msg.attach(form.paper.data.filename, 'application/octect-stream', form.paper.data.read())

看起来form.paper.data对象具有您稍后尝试使用的属性“filename”。在

为什么不试试return form.paper.data而不是{}?在

相关问题 更多 >