我有一个页面,允许用户下载动态生成的文件.生成需要很长时间,所以我想显示一个"等待"指标.问题是,我无法弄清楚如何检测浏览器何时收到文件,所以我可以隐藏指标.
我正在以隐藏的形式发出请求,该请求POST到服务器,并针对其结果定位隐藏的iframe.这样我就不会用结果替换整个浏览器窗口.我在iframe上监听"加载"事件,希望在下载完成后它会触发.
我在文件中返回"Content-Disposition:attachment"标题,这会导致浏览器显示"保存"对话框.但浏览器不会在iframe中触发"加载"事件.
我尝试过的一种方法是使用多部分响应.因此它会发送一个空的HTML文件,以及附加的可下载文件.例如:
Content-type: multipart/x-mixed-replace;boundary="abcde"
--abcde
Content-type: text/html
--abcde
Content-type: application/vnd.fdf
Content-Disposition: attachment; filename=foo.fdf
file-content
--abcde
Run Code Online (Sandbox Code Playgroud)
这适用于Firefox; 它接收空的HTML文件,触发"load"事件,然后显示可下载文件的"Save"对话框.但它在IE和Safari上失败了; IE触发"加载"事件但不下载文件,Safari下载文件(名称和内容类型错误),并且不会触发"加载"事件.
一种不同的方法可能是调用启动文件创建,然后轮询服务器直到它准备就绪,然后下载已经创建的文件.但我宁愿避免在服务器上创建临时文件.
有没有人有更好的主意?
我有敏感文件要下载给用户,每个用户只能下载一次给定文件.如果下载失败,我想允许重新下载,但不允许.
依靠在服务器上记录/处理文件下载请求是不够的 - 我需要确定地知道文件何时完成并在客户端就位,因为我的许多用户在频繁连接丢失的环境中工作.
最直接的方法是,如果浏览器从"另存为..."对话框中公开了"文件已保存"事件,该对话框可以连接到下载页面上的JavaScript函数(可以回发到服务器).但是,直觉表明,如果浏览器暴露了这个功能,可能会出现安全漏洞,因为它会在沙箱之外偷偷溜走.我不确定这是否可能.
我在这个领域发现 了 其他 几个问题 ,但没有具体说明这个问题.
有任何想法吗?
编辑:我不应该在原始问题中使用"安全"一词,对不起触发红色鲱鱼.
编辑2:我的"安全"措辞误导人们进入了外部技术安全问题,但你们两人都证实了我的怀疑,"不,没有浏览器支持." 因为他的第一句话得到了我的期待,所以我正在为第一个评论者做出回答.谢谢大家.
我只是一个Cometd的初学者,我很感兴趣并且想要了解cometd是什么以及使用了什么我用Google搜索并找到了一些资源.在以下链接中1. http://docs.cometd. org/reference/installation.html#d0e346.
我尝试了给定的演示,但我无法从中获得预期的输出.任何人都可以发布一些资源网址,以便我可以学习?
我有一个aspx(比如1.aspx)页面,首先我下载一个pdf文件,然后我想重定向到一些Thanks.aspx页面.代码是这样的:
protected void btnSubmit_Click(object sender, EventArgs e)
{
string pathId = string.Empty;
if (Page.IsValid)
{
try
{
pathId = hidId.Value;
DownloadPDF(pathId);
Response.Redirect("Thanks.aspx");
}
catch (Exception ex)
{
throw ex;
}
}
}
protected void DownloadPDF(string pathId)
{
if (!(string.IsNullOrEmpty(pathId)))
{
try
{
Response.ContentType = "application/pdf";
Response.AppendHeader("Content-Disposition", "attachment; filename=" + pathId + ".pdf");
string path = ConfigurationManager.AppSettings["Pdf_Path"].ToString() + "\\" + pathId.Trim() + ".pdf";
Response.TransmitFile(path);
}
catch (Exception ex)
{
throw ex;
}
finally
{
HttpContext.Current.ApplicationInstance.CompleteRequest();
}
}
}
Run Code Online (Sandbox Code Playgroud)
问题是,文件保存对话框正常,我也可以下载该文件,但它没有被重定向到Thanks.aspx页面.
怎么解决这个?
我有一个jQuery插件,用于在default.aspx asp.net页面上动态创建和呈现表单,然后提交它.它提交的页面是pdf.aspx页面.页面构建PDF然后使用Response.Write将文件(application/pdf)写入浏览器.我也使用相同的方法将XLSX文件呈现给浏览器.它的效果非常好,但是我需要一个回调或一些事件来告诉按钮什么时候停止旋转.这可以防止用户连续单击Excel或PDF按钮.当没有使用javascript创建文件对话框窗口时,是否有人知道检测文件对话框窗口的方法?我也对服务器端的其他回调方法持开放态度.
我正在尝试解决以下问题,但找不到合适的解决方案:
下载开始时禁用按钮(带有底层下载链接)(按钮已单击一次)并在下载完成后再次启用按钮?
我试图用谷歌搜索它,但甚至找不到有用的提示。这在一般情况下甚至可能吗?
javascript ×3
asp.net ×2
download ×2
browser ×1
c# ×1
cometd ×1
dom-events ×1
extjs ×1
extjs4 ×1
http ×1
jquery ×1
mime ×1
redirect ×1
save ×1
spring-mvc ×1