是否可以触发文件下载到用户的浏览器
Is it possible to trigger file download to a user's browser?
是否可以强制将文件下载到用户的浏览器(当然使用标准的对话框提示)?由服务器触发。基本上,我正在考虑将来自服务器文件系统的文件推送到浏览器。还是由于安全沙箱而无法做到这一点?如果这是不可能的,是否有一种非常接近这一点的不同方法?我不想在未经用户同意的情况下发送文件。我可以想到两步法,首先提示用户传入的数据,并让用户单击触发下载的确定按钮,但在下载结束时,用户将得到另一个确认框(要求打开或保存的标准下载提示)。如果一步就可以了,那就太好了。
使用每 5 秒或 10 秒轮询一次服务器的 ajax json 脚本,当服务器准备好文件时,响应肯定的答案"我有一个文件",将 iframe 移动到文件所在的 URL,然后将其作为正常下载处理。
我提供了一个小例子,说明我应该如何认为它应该工作,所以你有一些工作要做。不过,我还没有检查它是否有错误,它更像是一个概念证明的东西。
jQuery example(不带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;
}
这绝对是可能的。假设您希望由服务器触发此操作,则只需向他们发送此标头:
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);
?>
希望这作为伪代码足够好,可以帮助您入门。祝你好运!
由于您知道必须提示用户,请尝试使用带有 type="application/octet-stream"
的纯超链接。
您还可以在标题中使用:"content-disposition: attachment"
。
相关文章:
- javascript跨浏览器确定用户是否滚动到页面底部
- 我们如何在互联网断开连接或用户关闭选项卡/浏览器时调用注销servlet
- 如何在用户按下F5键或单击浏览器时显示自定义的fancybox's后退/关闭按钮
- javascript移动交叉浏览器确定用户是否滚动到页面底部
- 在用户关闭/更改移动浏览器选项卡之前进行检测
- 如何向特定用户/浏览器发送浏览器通知
- 每个用户/浏览器会话只加载一次Javascript
- 如何检测用户浏览器客户端
- 检测用户浏览器高度是否>=页面正文高度
- 如何在用户不刷新浏览器的情况下不断地向用户浏览器显示更新
- 当窗口最小化时,提醒用户浏览器内事件——而不是html5通知
- 如何在用户浏览器禁用javascript时阻止用户提交表单
- 检测用户浏览器是否关闭浏览器
- Jquery检查用户浏览器类型
- 当用户浏览器缩放时,如何处理覆盖
- Javascript在用户浏览器中保存表单值以防会话过期
- 最好最完整的用户浏览器"指纹"尽可能多地识别来访者的信息
- 如何使用javascript查找用户浏览器的最大窗口宽度和当前
- 页面刷新后,Gapi 登录状态不会保留在用户浏览器中
- 如何检测用户浏览器的视觉高度