我怎样才能动态地提供文件,然后使它们可以在 Django 中下载?
How can I dynamically serve files and then make them downloadable in Django?
我目前正在从事一个涉及大量 iCalendar 文件的项目。在用户在我的网站上搜索他们的名字后,我希望他们可以选择将显示的事件添加到他们的 phone 日历中。我想象的方法是创建一个 .ics 文件,当用户单击它时,该文件将根据用户名开始下载。
到目前为止,我所做的是一个 Django 视图,当按下 "Add to Calendar" 按钮时,将呈现该视图。然后视图将只获取查询的名称并获取其 ics_string 或日历数据。这是我到目前为止写的观点
def serve_calendar(request):
name = request.GET.get('name', '')
ics_string = get_calendar_details(name)
#the portion of code that i can't figure out
return response
我缺少的是如何发送此文件以供下载到客户端计算机而不需要在服务器上创建它。我使用 Django 库中的 io.StringIO 和 FileWrapeprs 找到了一些答案,但它们对我不起作用。我找到的其他答案使用 X-SendFile 但这对我不起作用,因为它需要文件的路径并且我不希望在服务器上创建文件。
我目前正在使用 Python 3.7.4 64 位和 Django 版本 2.2.7
您可以指定媒体类型,并在响应中添加 Content-Disposition
header:
from django.http import HttpResponse
def serve_calendar(request):
name = request.GET.get('name', '')
ics_string = get_calendar_details(name)
response = HttpResponse(ics_string<b>, content_type='text/calendar'</b>)
response[<b>'Content-Disposition'</b>] = 'attachment; filename=calendar.ics'
return response
我目前正在从事一个涉及大量 iCalendar 文件的项目。在用户在我的网站上搜索他们的名字后,我希望他们可以选择将显示的事件添加到他们的 phone 日历中。我想象的方法是创建一个 .ics 文件,当用户单击它时,该文件将根据用户名开始下载。
到目前为止,我所做的是一个 Django 视图,当按下 "Add to Calendar" 按钮时,将呈现该视图。然后视图将只获取查询的名称并获取其 ics_string 或日历数据。这是我到目前为止写的观点
def serve_calendar(request):
name = request.GET.get('name', '')
ics_string = get_calendar_details(name)
#the portion of code that i can't figure out
return response
我缺少的是如何发送此文件以供下载到客户端计算机而不需要在服务器上创建它。我使用 Django 库中的 io.StringIO 和 FileWrapeprs 找到了一些答案,但它们对我不起作用。我找到的其他答案使用 X-SendFile 但这对我不起作用,因为它需要文件的路径并且我不希望在服务器上创建文件。
我目前正在使用 Python 3.7.4 64 位和 Django 版本 2.2.7
您可以指定媒体类型,并在响应中添加 Content-Disposition
header:
from django.http import HttpResponse
def serve_calendar(request):
name = request.GET.get('name', '')
ics_string = get_calendar_details(name)
response = HttpResponse(ics_string<b>, content_type='text/calendar'</b>)
response[<b>'Content-Disposition'</b>] = 'attachment; filename=calendar.ics'
return response