如何在Django的FileField中将文件另存为附件?

时间:2012-01-25 19:08:36

标签: django attachment filefield

如何使用保存在FileField中的文件发送邮件?我不知道如何在下面的代码中访问该文件。

mail = EmailMessage(subject, message, 'from@from,com', ['to@to.com'])
mail.attach(?, ?, 'application/pdf')
mail.send()

修改

我尝试用

打开文件
f = list_pca.pdf_file.open(mode='rb')

其中list_pca是

的实例
class ListPCA(models.Model):
    pdf_file = models.FileField(upload_to=get_file_path_j, null=True, blank=True)

但是我收到错误“没有这样的文件或目录”,因为路径错误。

list_pca.pdf_file.path

也会返回错误的路径。由于upload_to选项,它不应该知道文件在哪里吗?

由于

由于

5 个答案:

答案 0 :(得分:2)

mail = EmailMessage(subject, message, 'from@from,com', ['to@to.com'])
mail.attach('arbitrary_filename', myfile.read(), 'application/pdf')
mail.send()

由于您正在使用EmailMessage,因此您也可以将附件kwarg传递给它。

email = EmailMessage(subject, message, 'from@from,com', ['to@to.com'], 
    attachments=(('foo.pdf', myfile.read(), 'application/pdf'),))

答案 1 :(得分:2)

通常,像aganders3建议的那样,我会使用:

mail.attach_file(myfile.path) as well

但是,我注意到包含空格的附件失败了。

答案 2 :(得分:0)

我认为这样做会:

mail.attach(os.path.basename(myfile.name), myfile.read(), 'application/pdf')

我可能会忽略MIME编码步骤,但IIRC mail.attach会这样做。

答案 3 :(得分:0)

尝试:

myfile = mymodel.somefilefield

mail = EmailMessage(subject, message, 'from@from,com', ['to@to.com'])
mail.attach('File Name', myfile.path, 'application/pdf')
mail.send()

答案 4 :(得分:0)

其他建议应该有效,但您也可以这样做:

mail.attach_file(myfile.path)

您可以选择将MIME类型作为第二个参数传递,但如果您不提供它,它只会尝试从文件名中找出它。