0

我正在用 Python Flask 开发一个网站。我要做的是以其中一种形式获取上传的文件并将其附加到邮件中。我尝试了类似问题中给出的解决方案,但它给出了以下错误:

AttributeError:“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() 函数。

4

1 回答 1

0

好吧,您遇到的错误意味着您正在尝试从字符串中读取文件。

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

发生这种情况是因为您的 uploadPaper() 函数返回的是字符串(或“str”)而不是“文件”对象。由于 Python 是面向对象的,因此您的脚本可能试图从文件对象中读取“文件名”属性。

我还可以在您的函数中看到有一个具有您要使用的属性的对象,在此处

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

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

你为什么不试试return form.paper.datareturn "success"

于 2018-02-21T03:24:45.853 回答