在 Django 中保存来自 FileResponse 的文件
Saving a file from FileResponse in Django
如何从 Django 中的 FileResponse 将文件保存到 FileField。
我有最简单的 PDF 函数在 Django 中创建 PDF 文件(根据 documentation)。
import io
from django.http import FileResponse
from reportlab.pdfgen import canvas
def some_view(request):
# Create a file-like buffer to receive PDF data.
buffer = io.BytesIO()
# Create the PDF object, using the buffer as its "file."
p = canvas.Canvas(buffer)
# Draw things on the PDF. Here's where the PDF generation happens.
# See the ReportLab documentation for the full list of functionality.
p.drawString(100, 100, "Hello world.")
# Close the PDF object cleanly, and we're done.
p.showPage()
p.save()
# FileResponse sets the Content-Disposition header so that browsers
# present the option to save the file.
buffer.seek(0)
return FileResponse(buffer, as_attachment=True, filename='hello.pdf')
它 returns PDF。但是如何将此 PDF 保存在 FileField 中?
我需要这样的东西:
Models.py
class FileModel(models.Model):
file = models.FileField()
Views.py
def some_view(request):
[...same code as above to line buffer.seek(0)...]
obj = FileModel()
obj.file = FileResponse(buffer, as_attachment=True, filename='hello.pdf')
obj.save()
为此任务 Django 提供了 File
wrapper object:
from django.core.files import File
def some_view(request):
# ...same code as above to line buffer.seek(0)...
obj = FileModel()
obj.file = File(buffer, name='hello.pdf')
obj.save()
如何从 Django 中的 FileResponse 将文件保存到 FileField。
我有最简单的 PDF 函数在 Django 中创建 PDF 文件(根据 documentation)。
import io
from django.http import FileResponse
from reportlab.pdfgen import canvas
def some_view(request):
# Create a file-like buffer to receive PDF data.
buffer = io.BytesIO()
# Create the PDF object, using the buffer as its "file."
p = canvas.Canvas(buffer)
# Draw things on the PDF. Here's where the PDF generation happens.
# See the ReportLab documentation for the full list of functionality.
p.drawString(100, 100, "Hello world.")
# Close the PDF object cleanly, and we're done.
p.showPage()
p.save()
# FileResponse sets the Content-Disposition header so that browsers
# present the option to save the file.
buffer.seek(0)
return FileResponse(buffer, as_attachment=True, filename='hello.pdf')
它 returns PDF。但是如何将此 PDF 保存在 FileField 中?
我需要这样的东西:
Models.py
class FileModel(models.Model):
file = models.FileField()
Views.py
def some_view(request):
[...same code as above to line buffer.seek(0)...]
obj = FileModel()
obj.file = FileResponse(buffer, as_attachment=True, filename='hello.pdf')
obj.save()
为此任务 Django 提供了 File
wrapper object:
from django.core.files import File
def some_view(request):
# ...same code as above to line buffer.seek(0)...
obj = FileModel()
obj.file = File(buffer, name='hello.pdf')
obj.save()