Javascript 从ajax请求下载PHP readfile,显示二进制文件

Javascript 从ajax请求下载PHP readfile,显示二进制文件,javascript,php,jquery,ajax,google-chrome,Javascript,Php,Jquery,Ajax,Google Chrome,我试图让我的php脚本下载一个图像,该图像的名称是从javascript中的ajax函数发送的,我认为我使用了所有正确的标题,然后我使用readfile()下载图像,当我预览php时,它使用chrome开发工具运行(ctrl+shift+I->network->XHR->preview)我得到的只是一堆乱七八糟的二进制文件,而我的图片没有下载。有人知道为什么会发生这种情况/如何解决吗 这是我的ajax,它只是在单击“下载”按钮时运行的函数中 $.ajax({ type: "POST",

我试图让我的php脚本下载一个图像,该图像的名称是从javascript中的ajax函数发送的,我认为我使用了所有正确的标题,然后我使用readfile()下载图像,当我预览php时,它使用chrome开发工具运行(ctrl+shift+I->network->XHR->preview)我得到的只是一堆乱七八糟的二进制文件,而我的图片没有下载。有人知道为什么会发生这种情况/如何解决吗

这是我的ajax,它只是在单击“下载”按钮时运行的函数中

$.ajax({

    type: "POST",
    url: 'requestAJAX.php',
    data: {request: request, download: imageName},
    success: function(){
        console.log("Request Completed: " + request);
    } // success   
}); 
这是我的“requestAJAX.php”


提前感谢您的帮助

这对你有帮助吗?到目前为止,我从您的代码中看到的是一种很好的方式,但是您要求二进制数据(
头(
),而在success函数中您对它什么也不做。它不会从二进制数据本身变成客户端下载..为什么要用这么长的过程来下载呢.在html中使用download prop:下面是一个例子:一切看起来都是正确的。JPEG图片是二进制的,您正在指示浏览器将其作为任意二进制数据处理(
内容类型:application/octet stream
)?到目前为止,我从您的代码中看到的是一种很好的方式,但是您要求二进制数据(
头(
),而在success函数中您对它什么也不做。它不会从二进制数据本身变成客户端下载..为什么要用这么长的过程来下载呢.在html中使用download prop:下面是一个例子:一切看起来都是正确的。JPEG图片是二进制的,您正在指示浏览器将其作为任意二进制数据处理(
内容类型:application/octet stream
)。
<?php

switch ($_POST["request"]) {
case "download":

    // Get parameters
    $file = $_POST["download"]; 
    $filepath = "UploadedImages/" . $file;

    if(file_exists($filepath)) {
        header('Content-Description: File Transfer');
        header('Content-Type: application/octet-stream');
        header('Content-Disposition: attachment; filename="'.$file.'"');
        header('Content-Transfer-Encoding: binary');
        header('Expires: 0');
        header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
        header('Pragma: public');
        header('Content-Length: ' . filesize($filepath));
        ob_clean();
        flush();

        // download 
        readfile($filepath);
        exit;
    } // if
    break; 
default: 
    echo "No request was made"; 
}
?>
ÿØÿàJFIFHHÿâ@ICC_PROFILE0appl mntrRGB XYZ ÙacspAPPLapplöÖÓ-appldscmòdescüogXYZlwtptrXYZbXYZ¨rTRC¼cprtÌ8chad,gTRC¼bTRC¼mlucenUS&~esES&daDK.êdeDE,¨fiFI(ÜfrFU(*itIT(VnlNL(nbNO&ptBR&svSE&jaJPRkoKR@zhTWlzhCNÔruRU"¤plPL,ÆYleinen RGB-profiiliGenerisk RGB-profilProfil Générique RVBN, RGB 0×0í0Õ0¡0¤0ëu( RGB r_icÏðPerfil RGB GenéricoAllgemeines RGB-Profilfn RGB cÏðeNöGenerel RGB-beskrivelseAlgemeen RGB-profielÇ|¼ RGB Õ¸\ÓÇ|Profilo RGB GenericoGeneric RGB Profile1I89 ?@>D8;L RGBUniwersalny profil RGBdescGeneric RGB ProfileGeneric RGB ProfileXYZ Zu¬s4XYZ óRÏXYZ tM=îÐXYZ (¸6curvÍtextCopyright 2007 Apple Inc., all rights reserved.sf32BÞÿÿó&ýÿÿû¢ÿÿý£ÜÀlÿáExifMM*JR(iZHH é ¡ÿÛC