1. 程式人生 > >python + Django 實現檔案下載

python + Django 實現檔案下載

from django.shortcuts import HttpResponse
def file_down(request):
    file=open('/home/amarsoft/下載/example.tar.gz','rb')
    response =HttpResponse(file)
    response['Content-Type']='application/octet-stream'
    response['Content-Disposition']='attachment;filename="example.tar.gz"'

雖然使用這三種方式都能實現,但是推薦用FileResponse,在FileResponse中使用了快取,更加節省資源。雖說是三種方式,但是原理相同,說白了就是一種方式。為了更好的實現檔案下載,FileResponse對StreamingHttpResponse做了進一步的封裝,即StreamingHttpResponse是FileResponse的父類。而HttpResponse,StreamingHttpResponse,FileResponse三者都繼承了基類HttpResponseBase。HttpResponseBase類是一個字典類,其封裝了一個_headers屬性,該屬性是一個字典型別,裡面封裝了response的頭資訊。因為該HttpResponseBase類被封裝成了一個字典類,所以可以直接使用response['Content-Type']這種形式訪問,也可以使用response._headers['Content-Type']訪問。值得注意的是:

1.HttpResponseBase只有來設定response的頭資訊,並不能返回給客戶端發生資料。

2.response.keys()這中形式不能訪問到字典的方法,必須使用response._headers.keys()才能訪問到字典的方法。