在Django中编程上传文件

qlvxas9a  于 2023-06-25  发布在  Go
关注(0)|答案(2)|浏览(129)

我已经检查了其他几个线程,但我仍然有一个问题。我有一个包含FileField的模型,我正在为各种目的生成半随机示例。但是,我在上传文件时遇到了问题。
当我创建一个新文件时,它看起来工作正常(新示例保存到数据库中),在适当的目录中创建了一个文件,但文件的内容丢失或损坏。
下面是相关代码:

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()

谢谢你!

llew8vvj

llew8vvj1#

会不会就像打开文件那么简单。由于您在'wb+'(write,binary,append)打开文件,句柄位于文件的末尾。尝试:

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()

现在它在文件的开头打开。

34gzjxbg

34gzjxbg2#

对于pdf文件,我使用了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()

相关问题