1

我正在将多个 pdf 上传从表单传递到视图中。(使用 Uppy.XHRUpload)

我想在将它们保存在模型中之前对其进行加密。

当我测试文件时,它们可以被加密并保存到文件中,然后读取和解密就好了。

但是当我尝试添加到模型时,我得到:

 'bytes' object has no attribute '_committed' occurred.

我可以下载加密文件,重新阅读然后保存,但这将是一种浪费。

我认为这很简单:

if request.method == 'POST' and request.FILES:

    files = request.FILES.getlist('files[]')

    for index, file in enumerate(files):

        f = Fernet(settings.F_KEY)

        pdf = file.read()
        encrypted = f.encrypt(pdf)

        PDF_File.objects.create(
            acct = a,
            pdf = encrypted
        )

该模型。

class PDF_File(models.Model):

     acct = models.ForeignKey(Acct, on_delete=models.CASCADE)
     pdf = models.FileField(upload_to='_temp/pdf/')

谢谢你的帮助。

4

1 回答 1

1

这是因为您无法将加密(字节)保存到模型中

尝试这个

from django.core.files.base import ContentFile

for index, file in enumerate(files):
    f = Fernet(settings.F_KEY)
    pdf = file.read()
    encrypted = f.encrypt(pdf)
    content_file = ContentFile(encrypted, name=your_filename)
    PDF_File.objects.create(
        acct = a,
        pdf = content_file
    )

从这里参考https://docs.djangoproject.com/en/4.0/topics/http/file-uploads/

于 2022-03-01T02:32:32.007 回答