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

django+python 實現下載檔案

轉自:出處1出處2

1. 新建一個檔案下載的模板(本文是基於bootstrap的模板):

<div class="row">
      <div class="col-md-8 col-md-offset-2">
          <br>
          <P>第一種方法,直接把連結地址指向要下載的靜態檔案,在頁面中點選該連結,可以直接開啟該檔案,在連結上點選右鍵,選擇“另存為”可以儲存該檔案到本地硬碟。
             此方法只能實現靜態檔案的下載,不能實現動態檔案的下載。</P>
          <a href="{% url 'media' 'uploads/11.png' %}">11.png</a>
          <br>
          <br>
          <p>第二種方法,將連結指向相應的view函式,在view函式中實現下載功能,可以實現靜態和動態檔案的下載。</p>
          <a href="{% url 'course:download_file' %}">11.png</a>
          <br>
          <br>
          <br>
          <p>第三種方法,與第二種方法類似,利用按鈕的響應函式實現檔案下載功能。</p>
          <label> 11.png</label><button onclick="window.location.href='{% url 'course:download_file' %}'">Download</button>
      </div>
  </div
2. 編寫相應的view函式:
def download_file(request):
    # do something

    the_file_name='11.png'             #顯示在彈出對話方塊中的預設的下載檔名    
    filename='media/uploads/11.png'    #要下載的檔案路徑
    response=StreamingHttpResponse(readFile(filename))
    response['Content-Type']='application/octet-stream'
    response['Content-Disposition']='attachment;filename="{0}"'.format(the_file_name)
    return response

def readFile(filename,chunk_size=512):
    with open(filename,'rb') as f:
        while True:
            c=f.read(chunk_size)
            if c:
                yield c
            else:
                break

3. 配置相應的頁面訪問url:

<input type='button' class='download'>

$("body").on("click",".download",function(){  location.href="/downloadFile/?url="+路徑;

});