programing

Jquery, PHP를 이용한 Ajax 파일 다운로드

closeapi 2023. 9. 13. 22:37
반응형

Jquery, PHP를 이용한 Ajax 파일 다운로드

사용자가 (ajax 및 $_GET을 사용하여) 전송된 $_GET 변수를 처리하고 다운로드를 위해 올바른 파일에 액세스하는 다운로드 링크를 클릭하는 ajax 기능을 사용하고 싶습니다.

$_GET 변수 처리를 처리하기 위한 PHP 스크립트가 몇 개 있는데, 이 스크립트는 자체적으로 작동하지만 Ajax를 사용하여 액세스하면 작동이 중단됩니다.

사용 중인 Ajax/PHP 코드는 다음과 같습니다.

function ajaxDown(){
$('#downloadmsg').html(
    '<img src=\"media/images/ajaxloader.gif\" width=\"128\" height=\"15\">');
$('#downloadmsg').load(
'media/downloads/downManager.php?file=".$filequery['filename']."&ftype=".$downex[1]."');
}

제 코드를 살펴보고 제가 무엇을 잘못하고 있는지 찾을 수 있도록 도와주세요.

고맙습니다

문제는 파일 결과를 #downloadmsg에 로드하려고 하는 것 같은데, .load()는 HTML로만 결과를 로드하기 때문에 작동하지 않을 것입니다...이진 데이터 또는 기타 인코딩이 아닙니다.

HTML에 숨겨진 iframe을 만드는 방법은 다음과 같습니다.

<iframe id="secretIFrame" src="" style="display:none; visibility:hidden;"></iframe>

그런 다음 iframe의 특성을 쿼리 문자열에 설정합니다.

$("#secretIFrame").attr("src","myphpscript.php?option1=apple&option2=orange");

소스가 설정되어 있을 때 PHP 헤더를 사용하여 강제 다운로드를 수행합니다(다음은 옥텟 스트림을 사용하는 스크립트 중 하나에서 설정된 내보내기 헤더의 예입니다).

header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header("Content-Disposition: attachment;filename=data.xls ");
header("Content-Transfer-Encoding: binary ");

도움이 되길 바랍니다!

늦었다는 거 알아요!하지만 숨겨진 iframe을 사용하지 않고도 좀 더 깔끔한 솔루션이 있다고 생각합니다. 그리고 그것을 수행하기 위해 ajax 요청도 필요 없을 것입니다!다운로드에서 수락된 답변에 명시된 대로 PHP 헤더를 사용합니다.php 파일

<?php
        //download.php 
        /*
          All your verification code will go here
        */      
        header("Pragma: public");
        header("Expires: 0");
        header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
        header("Content-Type: application/force-download");
        header("Content-Type: application/octet-stream");
        header("Content-Type: application/download");
        header("Content-Disposition: attachment;filename=".$_GET['file']);
        header("Content-Transfer-Encoding: binary ");

그리고 JS 쪽에서는, 간단히.

function download(filename){
    window.location="http://whateveryoursiteis.com/download.php?file="+filename;
}

매력적으로 작동합니다 :O

언급URL : https://stackoverflow.com/questions/3599670/ajax-file-download-using-jquery-php

반응형