从ajax请求下载laravel pdf文件(laravel 5)

Posted

技术标签:

【中文标题】从ajax请求下载laravel pdf文件(laravel 5)【英文标题】:laravel pdf file download from ajax request (laravel 5) 【发布时间】:2016-04-03 19:48:55 【问题描述】:

我的html代码是这样的:

<a href="javascript:;" onclick="showAjaxPdf(' $row->file_path ');"><i class="fa fa-file-pdf-o"></i></a>

我的javascript代码是这样的:

function showAjaxPdf(file_path)
        
            var file_path = file_path.replace(/\\/g,"/");
            //example : file_path = assets/images/myfile.pdf
            $.ajax(
                type: "POST",
                data: 'file_path=' + file_path,
                url: "news/test",
                success: function(response)
                
                    $('#test').html(response);

                
            );
        

我在控制器中的功能测试:

public function postTest(Request $request)
    
$file_path = $request->input('file_path');  
        return response()->download($file_path);       
    

当我点击pdf图标时,没有反应。

我希望,当点击 pdf 图标时,显示如下:

如何保存点击pdf图标时,图片出现的样子?

谢谢

【问题讨论】:

Download a file by jQuery.Ajax的可能重复 @user3158900,我觉得不一样。我在ajax响应中的问题。 success: function(response) $('#test').html(response); @user3158900, 响应似乎错误。 您的控制器正在尝试返回文件下载。您正在接受该响应并尝试将其设置为页面上的 html。很难说出你真正想要什么。您希望用户能够将 pdf 文件下载到他们的机器上,还是希望 pdf 本身的内容出现在页面的某个位置? @user3158900,感谢您回答我的问题。我希望用户能够将 pdf 文件下载到他们的机器上。 【参考方案1】:

我所做的是,编写了两条单独的路线,一条用于验证,一条用于下载。 在一个 ajax 成功后,我触发了 window.open(downloadUrl,'_blank') 在单独的窗口中下载。 这不是要求的方式,但它可以防止任何即将发生的错误,因为验证 url 会对其进行排序

$.ajax( 网址:验证网址, 类型:'得到', 缓存:假, 数据:空, 错误:函数 (err)$('#ajax_loader_div').hide();, 成功:功能(响应) 控制台日志(响应); $('#ajax_loader_div').hide(); if (response.status == '成功') window.open(downloadUrl,'_blank'); else if(response.status == 'error') //显示错误 );

【讨论】:

【参考方案2】:

为此,您需要使用响应对象设置标头。 请看下面的代码。

    $headers = array(
                  'Content-Type'=> 'application/pdf'
                );
$file_path = $request->input('file_path');  
 //TODO: you have to split the file name from url 
 return Response::download($file_path, '<filename>', $headers);

希望这段代码对你有帮助

【讨论】:

【参考方案3】:

返回Response::download($file_path, '&lt;filename&gt;', $headers);

是返回响应,不是下载文件!

【讨论】:

以上是关于从ajax请求下载laravel pdf文件(laravel 5)的主要内容,如果未能解决你的问题,请参考以下文章

.net webapi后台返回pdf文件流,前端ajax请求下载,空白pdf排错经历

无法通过 Vue.js(Axios 帖子)从 Laravel 后端下载文件(pdf)

使用 Axios 从 http 响应下载 PDF

使用 AJAX 请求下载文件数据 - ruby​​ on rails 3

使用Axios从http响应下载PDF

从 Ajax 调用控制器操作时无法下载生成的 PDF [重复]