我有一个模型,可以从ImageField上传文件。在我看来,我是通过POST获取的jpg文件中的值。
查看代码:
if request.method == "POST":
errorID = request.POST.get("errorid")
emailaddress = request.POST.get("toemail")
imageAttach = request.FILES['snapshot']
phoneNum = request.POST.get("number")
timeStamp = datetime.now()
imageAttach.name = str(errorID) + '.jpg'
ticket = UserTicket.create(errorID,emailaddress,phoneNum,imageAttach,timeStamp)
ticket.save()
型号代码:
class UserTicket(models.Model):
ErrorID = models.CharField(max_length=255,primary_key=True,unique=True,db_column='Error ID')
Emailaddress = models.CharField(max_length=255,db_column='Email Address',blank=True)
PhoneNumber = models.CharField(max_length=255,db_column='Phone Number',blank=True)
snapshot = models.ImageField(upload_to='images',blank=True,null = True,db_column='Image')
Timestamp = models.DateTimeField(blank=True,db_column='Date/Time Submitted')
@classmethod
def create(cls,eID,eAddress,pNumber,img,tStamp):
userTicket = cls( ErrorID = eID,Emailaddress = eAddress,PhoneNumber = pNumber,snapshot = img,Timestamp = tStamp)
return userTicket
我已将此数据设置为发送带有UserTicket中详细信息的电子邮件,并将图像文件作为附件。由于某些原因,当我直接从POST发送数据时,图像附件是完美的。但是当我创建对象后尝试发送数据时,文件为200字节,而Windows不知道如何处理该文件。
编辑进行澄清...此代码可以正常运行:
# ticket = UserTicket.create(errorID,timeStamp)
# ticket.save()
email = EmailMessage(
'ERROR ID: {}'.format(errorID),'Problem details here. Image attached. Name is {}'.format(imageAttach.name),'*****@****.com',['{}'.format(emailaddress)],)
email.attach(imageAttach.name,imageAttach.read(),imageAttach.content_type)
email.send()
但是这段代码给了我一个200字节的未知文件作为附件:
ticket = UserTicket.create(errorID,timeStamp)
ticket.save()
email = EmailMessage(
'ERROR ID: {}'.format(errorID),)
email.attach(imageAttach.name,imageAttach.content_type)
email.send()
注意-我将值从imageAttach等更改为ticket.snapshot,但这只是为了证明imageAttach值现在也不起作用。