簡體   English   中英

如何動態提供文件,然后使它們可在 Django 中下載?

[英]How can I dynamically serve files and then make them downloadable in Django?

我目前正在處理一個處理大量 iCalendar 文件的項目。 在用戶在我的網站上搜索他們的名字后,我希望他們可以選擇將顯示的事件添加到他們的電話日歷中。 我想象的方法是創建一個 .ics 文件,當用戶單擊它時,該文件將根據用戶名開始下載。

所以到目前為止我所做的是一個 Django 視圖,當按下“添加到日歷”按鈕時,視圖被呈現。 然后視圖將只獲取查詢的名稱並獲取其 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標頭:

from django.http import HttpResponse

def serve_calendar(request):
    name = request.GET.get('name', '')
    ics_string = get_calendar_details(name)
    response = HttpResponse(ics_string, content_type='text/calendar')
    response['Content-Disposition'] = 'attachment; filename=calendar.ics'
    return response

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM