在我的項目中,我有一個我希望用戶下載的文件。當他們點擊鏈接時,我想要一個彈出窗口顯示「如果它不啓動,請稍後下載」。幾秒鐘後,它將關閉,然後顯示實際的文件下載。如何使彈出窗口顯示消息,然後在5秒後顯示下載並關閉彈出窗口
我知道實現窗口關閉,你會使用:
window.setTimeout(function(){window.close()}, 5000);
但我不知道你將如何調用下載一旦窗口關閉?
乾杯的任何幫助!
在我的項目中,我有一個我希望用戶下載的文件。當他們點擊鏈接時,我想要一個彈出窗口顯示「如果它不啓動,請稍後下載」。幾秒鐘後,它將關閉,然後顯示實際的文件下載。如何使彈出窗口顯示消息,然後在5秒後顯示下載並關閉彈出窗口
我知道實現窗口關閉,你會使用:
window.setTimeout(function(){window.close()}, 5000);
但我不知道你將如何調用下載一旦窗口關閉?
乾杯的任何幫助!
以簡單的方式,使用window.open()
開始下載文件。
<a href="myfile.doc" id="download">Direct link</a>
<script type="text/javascript">
setTimeout(function() {
window.open("myfile.doc");
},3000);
</script>
好吧,所以我不知道你的平臺,所以會給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);
}
你可能想用.ContentType =「application/force-download」強制下載。 –
FYI:搜索「乾杯」將幫助你發現一些奇妙的東西,它可以幫助 –
一種方式是通過src =,使用javacript推動字節的文件/腳本文件的位置注入的iframe。我不喜歡你彈出的方法,但是...爲什麼不只是重定向到一個頁面,說'你的下載將在5秒內開始,否則點擊鏈接'。這是嘗試和測試。 –
你使用jQuery嗎?如果是的話,我會爲你敲代碼 –