是否可以强制文件下载到用户的浏览器(当然是标准对话框提示)?由服务器触发。基本上我正在考虑将来自服务器文件系统的文件推送到浏览器。还是因为安全沙箱而无法做到这一点?如果这不可能,是否有非常接近此的不同方法?我不想在未经用户同意的情况下发送文件。我可以想到两步方法,首先提示用户输入数据,然后让用户单击触发下载的确定按钮,但在下载快结束时,用户会得到另一个确认框(要求打开的标准下载提示或保存)。如果可以一步到位,那就太好了。
问问题
2027 次
3 回答
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);
?>
希望这可以作为伪代码很好地帮助您入门。祝你好运!
于 2012-08-08T14:49:26.447 回答
3
使用每 5 秒或 10 秒轮询一次服务器的 ajax json 脚本,当服务器准备好文件时以肯定回答“我有文件”进行响应,将 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;
}
于 2012-08-08T14:50:08.840 回答
0
由于您知道必须提示用户,因此请尝试使用带有type="application/octet-stream"
.
您还可以"content-disposition: attachment"
在标题中使用:。
于 2012-08-08T14:49:32.410 回答