在我的项目中,我有一个我希望用户下载的文件。当他们点击链接时,我想要一个弹出窗口显示“你的下载很快,如果它没有开始点击这里”。几秒钟后,它将关闭,然后显示实际的文件下载。
我知道要关闭窗口你会使用:
window.setTimeout(function(){window.close()}, 5000);
但是我不确定在窗口关闭后你会如何调用下载?
为任何帮助干杯!
答案 0 :(得分:2)
好的,所以我不知道你的平台所以会给出一个ASP.NET版本。如果你正在使用别的东西,那么我已经评论过你应该能够适应你的平台。
编辑:现在知道用户正在使用PHP,所以为PHP添加了代码片段(不健壮,但我不是PHP开发人员)......
1)SAME for 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响应。
FOR 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;
}
?>
警告请注意以上代码。我突然想到你可以直接传递文件名,我很确定有人可以用来在你的应用程序中的其他地方获取文件而不需要特别注意
FOR 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或者其他东西 - 我的代码非常复杂所以'对于读者的练习'
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);
}
答案 1 :(得分:2)
以简单的方式,使用window.open()
开始下载文件。
<a href="myfile.doc" id="download">Direct link</a>
<script type="text/javascript">
setTimeout(function() {
window.open("myfile.doc");
},3000);
</script>