0

PHP を使用してダウンロードを強制することについて、すでに多くの質問があることは知っていますが、何が間違っているのか、何をすべきなのかがわかりません。

ファイル名のリストがあり、ボタンをクリックしてそのうちの 1 つをダウンロードしたいと考えています。

私のjQuery:

$(".MappeDownload").on("click",function(e){
            e.stopPropagation();
            fileId=$(this).val()
            $.post("ajax/DownloadFile.php",{ id : fileId})
})

サーバー側には、ファイル名とファイルパスを含むテーブルがあります。

$sql = "SELECT vUploadPfad, vUploadOriginname  FROM tabUpload WHERE zUploadId='$_POST[id]'";
$result =  mysql_query($sql) or die("");
$file = mysql_fetch_array($result);
$localfile = $file["vUploadPfad"];
$name=$file["vUploadOriginname"];
$fp = fopen($localfile, 'rb');
        header("Cache-Control: ");   
        header("Pragma: ");         
        header("Content-Type: application/octet-stream");
        header("Content-Length: " . filesize($localfile));
        header("Content-Disposition: attachment; filename='".$name."';");
        header("Content-Transfer-Encoding: binary\n");
        fpassthru($fp);
        exit;

AJAX リクエストは成功しました。正しいヘッダー (ファイルサイズ、ファイル名など) を取得していますが、ダウンロードが開始されません。

4

4 に答える 4

3

ダウンロードを強制するアドレスにリダイレクトするだけで、ajax は必要ありません。ページは変更されないため、代わりに、PHP ファイルで $_POST を $_GET に変換する$.post("ajax/DownloadFile.php",{ id : fileId})必要があります。location.href = "ajax/DownloadFile.php?id="+fileId

于 2012-12-04T10:59:54.090 に答える
1

AJAX 要求への応答によってダウンロードがトリガーされることはありません。AJAX リクエストはバックグラウンドで静かに処理され、目に見えるアクティビティを直接トリガーすることはありません。

ダウンロードをトリガーするには、メイン ページまたは iframe をリダイレクトする必要があります。

于 2012-12-04T11:00:54.217 に答える
0

私の解決策があります:

<script>
//downloading the file

 $(document).on('click', '.download_file', function(){
  var path = $(this).data("name");
  var action = "download_file"

    $.ajax({
        url: "action.php",
        method: "POST",
        data: {path:path, action:action},
        success: function(data)
        {
            window.location.href = path;
        }
      })
})
</script>

そしてaction.php

<button  type"button" name="download" data-name="'.$name.'" class="download_file btn btn-success btn-xs">Pobierz</button></td>'
于 2017-10-04T18:22:27.803 に答える
0
  1. ファイル名を ajax で返す
  2. するとwindow.location.href = 'returned file name'ダウンロードが始まります!
于 2012-12-04T11:02:27.657 に答える