簡體   English   中英

在鏈接后執行“ thanks_for_downloading.html” +“保存文件…”的標准方法?

[英]Standard way of doing a “thanks_for_downloading.html” + “Save file…” after a link?

讓我們看一下FireFox。

他們有一個不錯的大型號召性用語按鈕:“ Firefox 3.6-免費下載”

您單擊該鏈接,它會將您鏈接到新頁面:“感謝您下載Firefox!您的下載應在幾秒鍾內開始。”

然后幾秒鍾后彈出窗口:“ FIREFOX.exe-您要保存還是丟棄此文件?”

對於整個網絡上的應用程序來說,這是非常標准的下載行為。 最簡單的方法是怎么做?

這有兩個部分:

  1. 強制瀏覽器下載文件,而不是嘗試顯示文件(使用.exe沒問題,但是您可能也想使用圖像,電影或HTML文件來進行處理)。
  2. 提示瀏覽器下載文件。

假設我們只希望瀏覽器下載文件,而無需更改頁面。 我們可以創建一個像這樣的鏈接,它將按預期工作:

<a href="/download.zip">Download File</a>

您的瀏覽器可能不知道如何處理zip文件,因此它將“ download.zip”直接下載到以URL中文件名命名的文件中。 但是,如果您要下載JPG,則無法使用:

<a href="/images/sunset.jpg">Save this Sunset!</a>

您的瀏覽器知道如何顯示JPEG,因此它將重定向頁面並顯示JPEG。 現在我們需要告訴瀏覽器不要顯示它,而是下載它。 為此,我們必須在服務器的響應中向它發送一些特定的HTTP標頭。

Apache可以通過在.htaccess中指定標頭來處理此問題,但是我將不討論特定的技術,而是只討論該機制。

因此,我們將以下標頭與圖片一起發送到瀏覽器:

Content-disposition: attachment; filename=the_sunset_of_a_lifetime.jpg;

第一個標頭content-disposition告訴您的瀏覽器我們希望文件成為附件,或者說,應該保存該文件,而不顯示該文件。 filename屬性告訴它用於保存文件的名稱(而不是“ sunset.jpg”,該文件將被命名為“ the_sunset_of_a_lifetime.jpg”)。

現在,下載“ sunset.jpg”文件的鏈接可以像我們想要的那樣工作。 但是,如何使瀏覽器下載而不需要用戶單擊鏈接,以便我們可以顯示“謝謝”頁面並提示下載開始? 一個簡單的<meta>標記就可以解決問題,告訴瀏覽器在設定的時間段后重定向頁面:

<meta http-equiv="refresh" content="2;url=/images/sunset.jpg">

當您的“謝謝”頁面的head帶有該meta標簽時,它將等待2秒鍾,然后嘗試加載圖像。 它會獲得我們在上一步中設置的標題,然后下載它而不是顯示它,並且用戶將根據需要保留在頁面上。

thanks_for_downloading.html示例內容:

<strong>Thanks for downloading XY</strong>

<script type="text/javascript">
window.onload = function(){
    window.location.href = "path/to/XY.exe";
};
</script>

下載鏈接只是指向thank_for_downloading.html頁面的鏈接

號召性用語按鈕是指向“謝謝”頁面的常規鏈接。 然后,在“謝謝”頁面上,使用javascript通過將“ window.location”屬性設置為文件的URL,將用戶重定向到您要下載的文件。

暫無
暫無

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

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