如何将输出文件的目标定向到我的数据库?
我的models.py的结构如下:
class Model(models.Model):
char = models.CharField(max_length=50, null=False, blank=False)
file = models.FileField(upload_to=upload_location, null=True, blank=True)
我让用户输入'char'的值,然后将'char'的值打印到文件上。成功打印到文件上的过程正在运行,但是文件正在输出到我的源目录。
我的目标是将输出文件'pdf01.pdf'输出到我的数据库,并以'file'表示,以便管理员可以读取它。
Dango文档中的许多信息都集中在直接引导用户导入的对象的路径上,而不是在内部创建的文件上。我大部分时间都在阅读这些文档:
我已经看到它建议写入缓冲区而不是文件,然后将缓冲区内容保存到我的数据库中,但是我无法找到许多与在线情况相关的示例。
也许我在有关缓冲区和BytesIO的知识上存在明显的差距?这是我一直用来更改pdf的功能,我一直在使用BytesIO在整个过程中临时存储文件,但无法弄清楚如何使用它将输出定向到任何特定位置。
can = canvas.Canvas(BytesIO(), pagesize=letter)
can.drawString(10, 10, char)
can.save()
BytesIO().seek(0)
text_pdf = PdfFileReader(BytesIO())
base_file = PdfFileReader(open("media/01.pdf", "rb"))
page = base_file.getPage(0)
page.mergePage(text_pdf.getPage(0))
PdfFileWriter().addPage(page)
PdfFileWriter().write(open("pdf01.pdf", "wb")
FileField
不会将文件直接存储在数据库中。文件在upload_to
参数确定的文件系统上的某个位置上载。数据库中仅存储一些元数据,包括文件系统中文件的路径。
如果要在数据库中保存文件的内容,则可以创建一个新的File
模型,该模型包括一个BinaryField
用于存储数据和一个CharField
用于存储可以从中获取文件的URL。拿来。要将PdfFileWriter的数据提供给Django的二进制字段,也许最合适的方法是使用BytesIO。