使用Ajax从公共目录在** laravel 5.4 **中下载Zip文件

时间:2019-01-10 11:49:53

标签: php ajax laravel-5.4

在我的laravel应用中,我的公共路径中有一个zip文件,我想使用ajax下载该文件,而不返回zip文件并抛出错误,图像中显示的任何人都可以帮助解决此问题,谢谢。 / p>

$files = glob(public_path('uploads/download-images'));
            \Zipper::make(public_path('uploads/product_images.zip'))->add($files)->close();
            return response()->download(public_path('uploads/product_images.zip'));

这是ajax

var join_selected_values = allVals.join(",");
            $.ajax({
                url: $(this).data('url'),
                type: 'POST',
                data:'_token = <?php echo csrf_token() ?>',
                data: 'ids='+join_selected_values,
                success: function (data) 
                {
                    window.location = data;
                    alert('Seccussfully Downloaded');
                },
                error: function (data) {
                    alert(data.responseText);
                }
            });

2 个答案:

答案 0 :(得分:0)

我不确定,但这可能与您必须为响应设置header configuration有关。当然,您必须将内容类型更改为所需的一种。希望对您有所帮助。

{
    $headers = [
        'Access-Control-Allow-Origin' => '*',
        'Access-Control-Allow-Methods' => 'POST, GET, OPTIONS, PUT, PATCH, DELETE',
        'Access-Control-Allow-Headers' => 'Access-Control-Allow-Headers, Origin,Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Authorization , Access-Control-Request-Headers',
        'Content-Type' => 'application/pdf'
        ];
    return response()->download(filepathHere, nameHere, $headers);
}

还请确保:

  

管理文件下载的Symfony HttpFoundation要求下载的文件具有ASCII文件名。

答案 1 :(得分:0)

据我了解,您无法使用Ajax调用返回下载响应。解决方法是,不要使用ajax请求下载。只需执行传统要求即可。因为它返回下载响应,所以浏览器将自动打开下载对话框,因此类似于不刷新。