更改文件的定向输出路径

问题描述 投票:0回答:1

如何将输出文件的目标定向到我的数据库?

我的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文档中的许多信息都集中在直接引导用户导入的对象的路径上,而不是在内部创建的文件上。我大部分时间都在阅读这些文档:

Models-Fields

Models

File response objects

Outputting PDFs

我已经看到它建议写入缓冲区而不是文件,然后将缓冲区内容保存到我的数据库中,但是我无法找到许多与在线情况相关的示例。

也许我在有关缓冲区和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")
django django-models django-views buffer pypdf2
1个回答
0
投票

FileField不会将文件直接存储在数据库中。文件在upload_to参数确定的文件系统上的某个位置上载。数据库中仅存储一些元数据,包括文件系统中文件的路径。

如果要在数据库中保存文件的内容,则可以创建一个新的File模型,该模型包括一个BinaryField用于存储数据和一个CharField用于存储可以从中获取文件的URL。拿来。要将PdfFileWriter的数据提供给Django的二进制字段,也许最合适的方法是使用BytesIO

© www.soinside.com 2019 - 2024. All rights reserved.