【问题标题】:PHP function call from AJAX - download file来自 ajax 的 PHP 函数调用 - 下载文件
【发布时间】:2018-08-12 03:11:42
【问题描述】:

我正在尝试使用 Ajax 和 PHP 函数来下载文件。 我的目标是使用 Ajax 将变量从 Datatable 发送到 PHP 函数。 PHP 函数会在我的存储中搜索文件并下载它。

它不工作。当我使用 URL 时,我可以下载文件。但是当我用 AJAX 触发它时它不起作用。

我想创建一个 PHP 函数,它将接收文件名并为 HTML 按钮生成下载链接。 (显示在数据表中)

阿贾克斯:

       //download button
    $('#files').on('click', 'button#download',function (ref) {
        var data = table.row($(this).parents('tr')).data();
        var file_name=data.filename;
        ref.preventDefault();
      //  alert(data.filename);
        $.ajaxSetup({
            headers: {
                'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
            }
        });
        $.ajax({
            type: 'POST',
            datatype:'binary',
            url: "/download?"+data.filename,
            success: function(result){
                console.log(result);
            }
        });
    });

PHP:

    public function getDownload(){
    $tmpfile='1520001503b1.png';
   $sd= DB::table('files')
        ->where('filename',$tmpfile)
        ->get();


    $myFile = public_path("uploads/1520001503b1.png");
    $headers = ['Content-Type: application/png'];
    $newName = 'bla'.time().'.png';


    return response()->download($myFile, $newName, $headers);

}

路线:

Route::match(['get', 'post'], '/download','FilesController@getDownload');

【问题讨论】:

  • 好吗?那么问题是什么?
  • 它不工作。当我使用 URL 时,我可以下载文件。但是当我用 AJAX 触发它时它不起作用。
  • 这里的 AJAX 没有意义。只需使用该链接,如果下载链接的响应头设置正确,浏览器将处理下载。
  • 所以答案可能是您必须让用户通过单击文件 url 来选择下载。出于安全原因,浏览器不会让另一种方式

标签: php ajax laravel downloadfile


【解决方案1】:

据我所知,您无法从直接 ajax 请求中下载文件,而是可以将动态下载 url 返回到 ajax 响应,并在 ajax 成功函数中触发浏览器位置更改,如下所示。

location.href = 'download.php';

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-03
    • 1970-01-01
    • 1970-01-01
    • 2021-03-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多