如何强制“另存为”对话框?

时间:2013-11-18 03:23:15

标签: javascript php jquery

有没有办法强制“另存为”对话框?

目前,如果您点击该链接,您将在浏览器中看到该内容,但我需要显示“另存为”对话框。该文件位于外部服务器上。

我已经尝试过:

$("#download_link").click(function() {
    document.execCommand('SaveAs','1','location');
});

不幸的是,这不起作用。

修改

当然,如果用户在浏览器中激活了此选项,则可以下载该文件。我只是不希望他被重定向到该网站。

如果有一种方法可以用PHP执行此操作也没关系,但看起来我需要使用readfile(),由于流量我不想要它。

我需要一个适用于外部服务器上文件的解决方案!

评论,指出一些事情:

  

很抱歉我需要问你,但你认真吗?我问过   我如何强制保存为对话框,你想出“非法”,   “混淆”等?我多次提到它是唯一的原因   为什么我要这样做是为了避免所需的文件被播放   直接在浏览器中。这不是非法的,不是任何东西   我想隐藏什么。我也不知道为什么这个问题会被标记出来   作为主题。

2 个答案:

答案 0 :(得分:1)

使用HTML5,您只需使用下载属性。

例如:<a href="myfile.pdf" download="myfile.pdf">Download Your Expense Report</a>

答案 1 :(得分:1)

如果文件在浏览器中显示为文本或作为文件下载,则取决于随文件一起发送的标头。 例如,这是excelfile的标题:

 header("Content-Type: application/vnd.ms-excel");
 header("Content-Disposition: attachment; filename=\"myfilename.xlsx\"");
 header("Cache-Control: max-age=0");

(Excelfile是用php生成的,没有这个标题我会在浏览器中看到文件中的漏洞文件)

重要的是Content-Type。

编辑:没有readfile()

正如你在你的问题中所说,你不想使用PHP文件的readfile(),你也可以用htaccess设置标题。

<FilesMatch "\.(?i:txt)$">
 ForceType application/octet-stream
</FilesMatch>

application / octet-stream =二进制文件(所以它总是下载)。 您必须重写FilesMatch以匹配您的文件