是否有可能迫使文件下载到用户的浏览器(当然是有标准的对话框提示)? 由服务器触发。 基本上我想推一个文件从服务器的文件系统未来的浏览器。 或者,这是不可能的,因为安全沙箱? 如果这是不可能的,是有不同的方式非常接近这个? 我不想发送文件W / O用户的同意。 我能想到的两步法,先提示输入数据的用户,并让上的OK按钮,触发下载用户点击,但临近下载结束时,用户将得到另一个确认框(它要求打开标准的下载提示或保存)。 这将是很好,如果可能足下。
Answer 1:
使用AJAX的JSON脚本轮询服务器每5秒或10秒,当服务器有一个肯定的回答:“我有一个文件”有一个iframe移动到该网址所在的文件是什么,然后它处理的文件准备响应作为一个正常的下载。
我提供的,我应该怎么想,它应该工作的一个小例子,所以你有什么要由工作。 我没有检查它的错误,虽然,它更多的概念的东西证明。
jQuery的例子(不JSON):
$.ajax('/myserverscript.php?fileready=needtoknow').done(function(data)
{
if(data.indexOf("I have a file") != -1)
{
xdata = data.split('\n');
data = xdata[1];
document.getElementById('myiframe').location.href = data;
}
});
PHP代码
$x = filecheckingfunction();// returns false if none, returns url if there is a file
if($x !== false)
{
echo 'I have a file\n';
echo $x;
}
Answer 2:
这是绝对有可能。 假设你想这是由服务器触发,你只需向他们发送这个头:
Location: http://www.foo.com/path/to/file
其中foo.com
是你的域,它包含的文件路径。 这将在向用户发送到您的文件链接,并让它们自动下载结果。
现在,为了避开在您的浏览器中查看内容的问题,需要用服务器端代码发布Content
头信息像这样(使用PHP为例):
<?php
header("Content-Type: application/octet-stream");
header("Content-Length: " . filesize($file));
header('Content-Disposition: attachment; filename=' . $file);
readfile($file);
?>
希望这个作品不够的伪代码让你开始。 祝好运!
Answer 3:
因为大家都知道,你必须提示用户,请尝试使用一个普通的超级链接同type="application/octet-stream"
。
你也可以使用: "content-disposition: attachment"
在标题中。
文章来源: Is it possible to trigger file download to a user's browser?