是否可以触发文件下载到用户的浏览器?

时间:2012-08-08 14:46:55

标签: javascript html ajax json cgi

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

3 个答案:

答案 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"