当前位置: 首页 > 面试题库 >

通过Ajax和PHP强制下载

柳和怡
2023-03-14
问题内容

我想创建一个允许强制下载JPG的下载脚本。这是我的PHP脚本:

<?php
    header("Pragma: public"); // required
    header("Expires: 0");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Content-Description: File Transfer");
    header("Content-Type: image/jpg");
    header('Content-Disposition: attachment; filename="'.basename($GET['a']).'"');
    header("Content-Transfer-Encoding: binary");
    header("Content-Length: ".filesize(($GET['a']));
    readfile(($GET['a']);
?>

这是我的js代码的代码段:

function downloadFile(a){
    document.location = "download.php?a="+ a;
}

使用此代码示例,什么都不会发生。如果我将结果附加到HTML标记中,它将显示文件的内容。

有什么想法可以教浏览器下载此文件吗?

编辑:脚本更新


问题答案:

您无法使用Ajax下载文件。因此,如果您在ajax上发生了某些情况,则应返回url作为响应,并像document.location = "url"开始下载过程一样应用它。

这里有一个音符。我记得,如果不是用户单击启动浏览器,浏览器将阻止文件下载。因此,这将正常工作:

.click(function(){
   document.location = "download url"
})

但是,如果不是通过用户单击启动它,它将被阻止。因此,这样的代码:

.click(function(){
       $.ajax({...,
       success:function(download_url_from_server){
           document.location = download_url_from_server;
       }});           
    })

将被浏览器阻止。因此,如果您想在发布时传递一些数据,可以使用以下方法将表单提交到隐藏的iframe或空白页中<form target="..."

 function checkToken(token){
    var $form = $("#downloadForm");
    if ($form.length == 0) {
        $form = $("<form>").attr({ "target": "_blank", "id": "downloadForm", "method": "POST", "action": "script.php" }).hide();
        $("body").append($form);
    }
    $form.find("input").remove();
    var args = { a: "checkToken", b: token }
    for (var field in args) {
        $form.append($("<input>").attr({"value":args[field], "name":field}));
    }
    $form.submit();
}

在script.php中,如果令牌正常,您需要立即从download.php执行代码,或者重定向到下载脚本:

header("Location: download.php?a=" . $filename)


 类似资料:
  • 本文向大家介绍php通过修改header强制图片下载的方法,包括了php通过修改header强制图片下载的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了php通过修改header强制图片下载的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的php程序设计有所帮助。

  • 问题内容: 是否可以通过JS或Javascript强制进行下载,即网页不应该在浏览器的新标签页中打开文件,而是弹出窗口让用户选择“另存为”或使用???打开? 问题答案: 您不能通过JavaScript强制这种行为,需要在服务器端设置HTTP标头: 解决问题的方法是让AJAX方法将用户重定向到PDF的URL: (必须为PDF设置以上HTTP标头)

  • 问题内容: 我有一个按钮,它将调用ajax函数。 这是我的ajax功能 我根据用户输入创建csv文件。创建之后,我希望它提示下载或强制下载(最好是强制)。我在php文件的末尾使用以下脚本来下载文件。如果我在单独的文件中运行此脚本,则可以正常运行。 但是,如果我在csv.php的末尾运行它,它会将file.csv的内容输出到页面中(进入ajaxDiv)而不是下载。 有没有办法强制在csv.php的末

  • 本文向大家介绍PHP 通过AJAX调用下载文件,包括了PHP 通过AJAX调用下载文件的使用技巧和注意事项,需要的朋友参考一下 使用Ajax下载文件不是一个好主意。而是应使用window.location 或 document.location。 “window.location”具有以下特点- 需要启用JavaScript 它不需要PHP。 它有助于显示站点的内容,并在几秒钟后重定向用户。 重定

  • 我是php和ajax的新手。我试图从文档列表中强制下载文件。单击按钮后使用ajax调用触发以下功能。 我假设我得到的是文件内容作为响应,而不是下载文件。如果能给我一些建议,我将不胜感激。

  • 问题内容: 伙计们,我知道有很多关于强制弹出下载对话框的话题,但是还没有一个解决方案对我有用。 我的应用程序将邮件发送到用户的电子邮件帐户,通知他们“另一个用户向他们发送了一条消息”。这些消息可能具有指向Excel文件的链接。当用户单击其GMail / Yahoo Mail / Outlook中指向该Excel文件的链接时,我希望弹出“文件保存”对话框。 问题:右键单击并在IE上执行“另存为”时,