使用我上传的文件在Django中创建模型对象会损坏文件

我有一个模型,可以从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值现在也不起作用。

fangjin16 回答:使用我上传的文件在Django中创建模型对象会损坏文件

找到了解决方案。原来这是一个愚蠢的疏忽,但我也在这里学到了教训。

解决方案是仅在创建对象后使用ticket.Snapshot。我不知道我怎么想念它。我说服自己已经测试过,然后尝试使用imageAttach变量。

这里的教训是,在将原始变量传递到UserTicket后尝试使用原始变量时,它出错了。一定要归因于Python中参数传递的方式吗?也许其他任何知道的人都可以添加到该答案中。

本文链接:https://www.f2er.com/3115747.html

大家都在问