我正在使用Python Flask开发一个网站。我要做的是在其中一个表单中获取上传文件并将其附加到邮件中。我尝试了在类似问题中给出的解决方案,但它给出了以下错误:
属性错误:' str'对象没有属性'文件名'
我做错了什么?我是python和flask的初学者。 这是我的代码:
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()函数。
答案 0 :(得分:0)
嗯,你得到的错误意味着你正在尝试从字符串中读取文件。
AttributeError: 'str' object has no attribute 'filename'
这是因为你的uploadPaper()函数返回一个字符串(或'str')而不是'file'对象。由于Python是面向对象的,因此您的脚本可能会尝试从文件对象中读取“filename”属性。
我还可以在你的函数中看到有一个对象具有你想要使用的属性,在
msg.attach(form.paper.data.filename, 'application/octect-stream', form.paper.data.read())
看起来form.paper.data
对象具有您稍后尝试使用的属性“filename”。
为什么不尝试return form.paper.data
而不是return "success"
?