2011-12-10 205 views
2

在我的項目中,我有一個我希望用戶下載的文件。當他們點擊鏈接時,我想要一個彈出窗口顯示「如果它不啓動,請稍後下載」。幾秒鐘後,它將關閉,然後顯示實際的文件下載。如何使彈出窗口顯示消息,然後在5秒後顯示下載並關閉彈出窗口

我知道實現窗口關閉,你會使用:

window.setTimeout(function(){window.close()}, 5000); 

但我不知道你將如何調用下載一旦窗口關閉?

乾杯的任何幫助!

+0

FYI:搜索「乾杯」將幫助你發現一些奇妙的東西,它可以幫助 –

+0

一種方式是通過src =,使用javacript推動字節的文件/腳本文件的位置注入的iframe。我不喜歡你彈出的方法,但是...爲什麼不只是重定向到一個頁面,說'你的下載將在5秒內開始,否則點擊鏈接'。這是嘗試和測試。 –

+0

你使用jQuery嗎?如果是的話,我會爲你敲代碼 –

回答

2

以簡單的方式,使用window.open()開始下載文件。

<a href="myfile.doc" id="download">Direct link</a> 

<script type="text/javascript"> 
    setTimeout(function() { 
     window.open("myfile.doc"); 
    },3000); 
</script> 
2

好吧,所以我不知道你的平臺,所以會給ASP.NET版本。如果您正在使用其他的東西,那麼我已經評論過,所以您應該能夠適應您的平臺。

編輯:現在知道用戶正在使用PHP這樣添加的代碼段用於PHP(不穩健,但我不是PHP開發)...

1)同爲PHP/ASP你得到一個文件那將不會被瀏覽器自動顯示?即.js將顯示爲是,但一個exe可能會觸發一個文件下載對話框(有人糾正我,如果錯了,我會更新)

如果你的文件總是會是.exe那麼你可能可能剛剛逃脫。

$("body").append("<iframe src='http://www.targetsite.com/files/thefilename.exe'></iframe>"); 

但更可能你會使用一個參數來找到正確的文件(隱藏直接下載

$("body").append("<iframe src='http://www.targetsite.com/downloader/?file=1234-1234-1234'></iframe>"); 

在一些setTimeout函數

如果文件類型未知,那麼我建議將上面的代碼指向一個腳本文件(.ashx,php等),將文件字節流寫入http響應。

爲PHP:

<?php // Demo - send a (binary) file 

$file = "ireland.jpg";//here you would use the query string parameter of the above 
         //ajax/iframe request eg file=1234-1234-1234 to find image in db 
$fp = fopen($file,"r") ; 

header("Content-Type: image/jpeg");//this would need to be modified to either show right content type or you could 
            //set it to Application/force-download 

while (! feof($fp)) { 
     $buff = fread($fp,4096); 
     print $buff; 
     } 
?> 

警告小心上面的代碼。它發生在我身上,你可能會傳遞文件名直接,我敢肯定有人可以用它來獲得在您的應用程序其他地方文件,而不小心注意

爲ASP:

我已經包含了一個例子ASHX (通用處理器)解決方案:

aspx.cs

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using Wardle.PdfGenerator; 
using System.IO; 

public partial class user_account_iframedownloader : System.Web.UI.Page 
{ 
    private IInformixRepository _rep; 
    //this page gets loaded into an iframe so we can do downloads while using ajax 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     //write bytes out here i.e. see after for methods 

    } 
} 

例字節輸出方式(你只需要做File.getBytes什麼的 - 我的代碼相當複雜,所以「鍛鍊; Tibial FO r閱讀器'

public static void PdfOutput(byte[] pdfData, string filename) 
{ 
    HttpContext.Current.Response.ContentType = "Application/pdf"; 
    HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=\"" + filename); 
    HttpContext.Current.Response.BinaryWrite(pdfData); 
} 
public static void PdfZipOutput(byte[] zipData, string filename) 
{ 
    HttpContext.Current.Response.ContentType = "Application/zip"; 
    HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=\"" + filename); 
    HttpContext.Current.Response.BinaryWrite(zipData); 
} 
+0

你可能想用.ContentType =「application/force-download」強制下載。 –

相關問題