【问题标题】:Laravel 5 download excel file (maatwebsite/excel) under storage/export through AJAXLaravel 5通过AJAX在storage/export下下载excel文件(maatwebsite/excel)
【发布时间】:2018-10-27 06:05:50
【问题描述】:

我想下载一个存储在 storage/export/ 路径中的 excel 文件。我在 laravel 5.5 中为此使用了 Maatwebsite excel 提供程序。

我的控制器代码如下:

ob_end_clean();
ob_start();
Excel::create($excelName, function($excel) use($adminUserDataExcelSelected) {
$excel->sheet('Sheet 1', function($sheet) use($adminUserDataExcelSelected) {
$sheet->fromArray($adminUserDataExcelSelected);
});
})->store('xlsx');
ob_flush();
return response()->json(['path' => $path]);

我的 AJAX 代码如下;

$.ajax({
url: "/administrator/adminUser/exportselected/1/",
type:'POST',
data: {_token:_token, selected:selected, selectedField:selectedField},
success: function(data) { alert(data.path);
if($.isEmptyObject(data.error)){
}else{}
}
});

当我提醒/控制台记录 data.path 时,我收到以下信息:

/var/www/html/stmd_OLD/storage/export/Admin-Users2018-05-17 04:46:47

我的问题是:现在如何立即下载 excel 文件?我应该在这里调用另一个 AJAX 方法吗?

【问题讨论】:

    标签: laravel laravel-5


    【解决方案1】:

    你需要替换这行return response()->json(['path' => $path]); 用这条线

    return response()->download(storage_path('storage/export/AdminUsers2018-05-17 04:46:47.xlsx'));
    

    然后你只需要点击调用返回 this 的控制器函数的链接。无需额外的 AJAX 调用。

    您可能还需要在控制器的开头添加此行

    use Illuminate\Support\Facades\Storage;
    

    【讨论】:

    • 我修改了代码但是,excel文件没有下载。我也应该更改 AJAX 代码吗?
    • 您能看到存储/导出文件夹中的文件吗?通常可下载的文件保存在公共文件夹下,因为它具有所有权限。尝试从公共文件夹下载文件。
    • 为什么你的 Ajax 调用是 POST 格式。路线应该是 GET
    • 我在 ajax 中使用了 POST 方法,因为我必须先提供输入才能生成 excel 文件。
    • 从公用文件夹而不是存储中下载文件的代码是什么?
    猜你喜欢
    • 2018-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-16
    • 2023-03-27
    • 2020-05-03
    • 2016-06-17
    相关资源
    最近更新 更多