14

I have checked several other threads but I am still having a problem. I have a model that includes a FileField and I am generating semi-random instances for various purposes. However, I am having a problem uploading the files.

When I create a new file, it appears to work (the new instance is saved to the database), a file is created in the appropriate directory, but the file's content is missing or corrupt.

Here is the relevant code:

class UploadedFile(models.Model):
  document = models.FileField(upload_to=PATH)


from django.core.files import File

doc = UploadedFile()
with open(filepath, 'wb+') as doc_file:
   doc.documen.save(filename, File(doc_file), save=True)
doc.save()

Thank you!

SapphireSun
  • 9,170
  • 11
  • 46
  • 59

2 Answers2

28

Could it be as simple as the opening of the file. Since you opened the file in 'wb+' (write, binary, append) the handle is at the end of the file. try:

class UploadedFile(models.Model):
  document = models.FileField(upload_to=PATH)


from django.core.files import File

doc = UploadedFile()
with open(filepath, 'rb') as doc_file:
   doc.document.save(filename, File(doc_file), save=True)
doc.save()

Now its open at the beginning of the file.

Andre Bossard
  • 6,191
  • 34
  • 52
JudoWill
  • 4,741
  • 2
  • 36
  • 48
1

For pdf files I used the receipt from django doc: https://docs.djangoproject.com/en/4.2/topics/files/

from pathlib import Path

from django.core.files import File

class Invoice(TimeStampedModel):
    magnifinance_file = models.FileField(blank=True, null=True)

invoice = Invoice.objects.get(pk=1)
path = Path('/path_to_file/mf_invoice.pdf')
with path.open(mode="rb") as f:
     invoice.magnifinance_file = File(f, name=path.name)
     invoice.save()
Ivan Rostovsky
  • 614
  • 1
  • 8
  • 16