3

是否可以强制文件下载到用户的浏览器(当然是标准对话框提示)?由服务器触发。基本上我正在考虑将来自服务器文件系统的文件推送到浏览器。还是因为安全沙箱而无法做到这一点?如果这不可能,是否有非常接近此的不同方法?我不想在未经用户同意的情况下发送文件。我可以想到两步方法,首先提示用户输入数据,然后让用户单击触发下载的确定按钮,但在下载快结束时,用户会得到另一个确认框(要求打开的标准下载提示或保存)。如果可以一步到位,那就太好了。

4

3 回答 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 回答