• <i id='AuG8B'><tr id='AuG8B'><dt id='AuG8B'><q id='AuG8B'><span id='AuG8B'><b id='AuG8B'><form id='AuG8B'><ins id='AuG8B'></ins><ul id='AuG8B'></ul><sub id='AuG8B'></sub></form><legend id='AuG8B'></legend><bdo id='AuG8B'><pre id='AuG8B'><center id='AuG8B'></center></pre></bdo></b><th id='AuG8B'></th></span></q></dt></tr></i><div id='AuG8B'><tfoot id='AuG8B'></tfoot><dl id='AuG8B'><fieldset id='AuG8B'></fieldset></dl></div>
    <tfoot id='AuG8B'></tfoot>

        <bdo id='AuG8B'></bdo><ul id='AuG8B'></ul>
      <legend id='AuG8B'><style id='AuG8B'><dir id='AuG8B'><q id='AuG8B'></q></dir></style></legend>

      <small id='AuG8B'></small><noframes id='AuG8B'>

      1. 通过 Ajax 和 PHP 强制下载

        时间:2023-08-20

          <legend id='cdOJd'><style id='cdOJd'><dir id='cdOJd'><q id='cdOJd'></q></dir></style></legend><tfoot id='cdOJd'></tfoot>

        1. <small id='cdOJd'></small><noframes id='cdOJd'>

        2. <i id='cdOJd'><tr id='cdOJd'><dt id='cdOJd'><q id='cdOJd'><span id='cdOJd'><b id='cdOJd'><form id='cdOJd'><ins id='cdOJd'></ins><ul id='cdOJd'></ul><sub id='cdOJd'></sub></form><legend id='cdOJd'></legend><bdo id='cdOJd'><pre id='cdOJd'><center id='cdOJd'></center></pre></bdo></b><th id='cdOJd'></th></span></q></dt></tr></i><div id='cdOJd'><tfoot id='cdOJd'></tfoot><dl id='cdOJd'><fieldset id='cdOJd'></fieldset></dl></div>
              • <bdo id='cdOJd'></bdo><ul id='cdOJd'></ul>
                    <tbody id='cdOJd'></tbody>
                  本文介绍了通过 Ajax 和 PHP 强制下载的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

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

                  i want to create a downloadscript which allows Force Download of JPGs. This is my php script:

                  <?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代码的一段代码:

                  This is a code segment of my js code:

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

                  使用此代码示例没有任何反应.如果我将结果附加到 HTML 标签中,它会显示文件的内容.

                  With this code sample nothing happens. If i append the result into a HTML-tag, it shows the content of the file.

                  任何想法如何教浏览器下载此文件?

                  Any ideas how to teach the browser to download this file?

                  脚本更新

                  推荐答案

                  您无法使用 ajax 下载文件.所以,如果你有一些应该在 ajax 上发生的事情,你应该返回 url 作为响应并像 document.location = "url" 一样应用它来开始下载过程.

                  You can't download files with ajax. So, if you have something that should happen on ajax, you should return url in response and apply it like document.location = "url"to start download process.

                  这里有一个注意事项.我记得,如果不是由用户点击启动,浏览器将阻止文件下载.所以,这会正常工作:

                  One note here. As I remember, browser will block file download if it is initiated not by user click. So, this will work fine:

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

                  但是如果不是通过用户点击启动的,它会被阻止.所以,代码如下:

                  But if it is started not by user click, it will be blocked. So, code like this:

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

                  会被浏览器拦截.因此,如果您想通过帖子传递一些数据,您可以使用 <form target="..." 将表单提交到隐藏的 iframe 或空白页面:

                  will be blocked by browser. So, if you want to pass some data with a post, you may submit a form into hidden iframe or to blank page using <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 的代码,如果令牌没问题,或者做一个重定向来下载脚本:

                  And in script.php you need to execute code from download.php immediately, if token is Ok, or do a redirect to download script:

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

                  这篇关于通过 Ajax 和 PHP 强制下载的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  上一篇:PHP readfile() 导致文件下载损坏 下一篇:PHP 强制下载导致 0 字节文件

                  相关文章

                  <small id='n6qhR'></small><noframes id='n6qhR'>

                      <i id='n6qhR'><tr id='n6qhR'><dt id='n6qhR'><q id='n6qhR'><span id='n6qhR'><b id='n6qhR'><form id='n6qhR'><ins id='n6qhR'></ins><ul id='n6qhR'></ul><sub id='n6qhR'></sub></form><legend id='n6qhR'></legend><bdo id='n6qhR'><pre id='n6qhR'><center id='n6qhR'></center></pre></bdo></b><th id='n6qhR'></th></span></q></dt></tr></i><div id='n6qhR'><tfoot id='n6qhR'></tfoot><dl id='n6qhR'><fieldset id='n6qhR'></fieldset></dl></div>
                        <bdo id='n6qhR'></bdo><ul id='n6qhR'></ul>

                      <legend id='n6qhR'><style id='n6qhR'><dir id='n6qhR'><q id='n6qhR'></q></dir></style></legend>
                    1. <tfoot id='n6qhR'></tfoot>