簡體   English   中英

如何將文件附加到從Flask Form收到的Flask Mail中?

[英]How to attach file to Flask Mail received from Flask Form?

我正在用Python Flask開發一個網站。 我要做的是以一種形式獲取上傳的文件,並將其附加到郵件中。 我嘗試了類似問題中給出的解決方案,但出現以下錯誤:

AttributeError:'str'對象沒有屬性'filename'

我究竟做錯了什么? 我是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()函數。

好吧,您收到的錯誤意味着您正在嘗試從字符串中讀取文件。

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

發生這種情況是因為您的uploadPaper()函數返回的是字符串(或“ str”),而不是“ file”對象。 由於Python是面向對象的,因此您的腳本可能正在嘗試從文件對象讀取“文件名”屬性。

我還可以在您的函數中看到,有一個具有您要使用的屬性的對象,在這里

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

看起來form.paper.data對象具有您稍后要嘗試使用的屬性“文件名”。

為什么不嘗試return form.paper.data而不是return "success"呢?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM