Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否可以触发文件下载到用户';s浏览器?_Javascript_Html_Ajax_Json_Cgi - Fatal编程技术网

Javascript 是否可以触发文件下载到用户';s浏览器?

Javascript 是否可以触发文件下载到用户';s浏览器?,javascript,html,ajax,json,cgi,Javascript,Html,Ajax,Json,Cgi,是否可以强制将文件下载到用户的浏览器(当然有标准的对话框提示)?由服务器触发。基本上,我正在考虑将一个文件从服务器文件系统推送到浏览器。或者这是不可能的,因为安全沙箱? 如果这是不可能的,是否有一个不同的方式非常接近这一点?我不想发送未经用户同意的文件。我可以考虑两步方法,首先提示用户输入数据,然后让用户单击OK按钮触发下载,但在下载接近结束时,用户将得到另一个确认框(要求打开或保存的标准下载提示)。如果一步就能做到,那就太好了。这绝对是可能的。假设您希望此消息由服务器触发,只需向他们发送以下标

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

这绝对是可能的。假设您希望此消息由服务器触发,只需向他们发送以下标题:

Location: http://www.foo.com/path/to/file
其中
foo.com
是您的域,它包含文件的路径。这会将用户发送到您的文件链接,并让他们自动下载

现在,为了解决浏览器查看内容的问题,您需要使用服务器端代码来发布
内容
标题信息(以PHP为例):



希望这能很好地作为伪代码让您开始。祝你好运

由于您知道必须提示用户,请尝试使用带有
type=“application/octet stream”
的普通超链接


您还可以在标题中使用:
“内容处置:附件”

使用每5秒或10秒轮询服务器的ajax json脚本, 当服务器有一个文件准备就绪时,响应为肯定回答“我有一个文件”,让iframe移动到文件所在的url,然后将其作为正常下载处理

我已经提供了一个小例子,说明我应该如何认为它应该起作用,这样你就有了工作的基础。我还没有检查它是否有bug,它更像是一个概念证明

jQuery示例(不含json):

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;
    }

不一定-如果它们在浏览器中,并且您将它们链接到图片(或其他类似资源),则浏览器只会查看图片。
$.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;
        }
    });
$x = filecheckingfunction();// returns false if none, returns url if there is a file
if($x !== false)
    {
    echo 'I have a file\n';
    echo $x;
    }