是否可以强制文件下载到用户的浏览器(当然还有标准的对话框提示)?由服务器触发。基本上我正在考虑将文件推送到来自服务器文件系统的浏览器。或者由于安全沙箱,这是不可能的? 如果这是不可能的,有不同的方式非常接近这个?我不想在用户同意的情况下发送文件。我可以想到两步法,首先提示用户输入数据,然后让用户点击OK按钮触发下载,但接近下载结束时,用户将获得另一个确认框(标准下载提示,要求打开)或保存)。如果可以一步到位,那就太好了。
答案 0 :(得分:3)
这绝对有可能。假设您希望服务器触发此操作,您只需向其发送此标头:
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);
?>
希望这可以很好地作为伪代码来帮助您入门。祝你好运!
答案 1 :(得分:3)
使用ajax json脚本每隔5秒或10秒轮询一次服务器, 当服务器准备好文件时,回答“我有一个文件”,并将iframe移动到该文件所在的URL,然后将其作为正常下载处理。
我提供了一个小例子,说明我应该如何认为它应该有效,所以你有一些工作要做。我没有检查过它的错误,它更像是一个概念证据。
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;
}
答案 2 :(得分:0)
由于您知道必须提示用户,因此请尝试使用带有type="application/octet-stream"
的普通超链接。
您还可以在标题中使用:"content-disposition: attachment"
。