是否有可能触发文件下载到用户的浏览器吗?(Is it possible to trigger fil

2019-09-21 00:55发布

是否有可能迫使文件下载到用户的浏览器(当然是有标准的对话框提示)? 由服务器触发。 基本上我想推一个文件从服务器的文件系统未来的浏览器。 或者,这是不可能的,因为安全沙箱? 如果这是不可能的,是有不同的方式非常接近这个? 我不想发送文件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?