【发布时间】:2021-09-16 20:56:11
【问题描述】:
在我的 Laravel 5.8 应用程序中,我动态生成 URL 以下载存储在 storage 目录下的文档。
我通过电子邮件发送生成的 url,所以用户可以点击它来下载文件。
在浏览器中直接引入接收到的链接时,生成的文件是正确下载的。但是,从 gmail 邮箱中单击它时,会打开一个新选项卡,并在一秒钟后关闭而不下载文件。
路由web.php文件:
Route::get('download/{path}', ['as' => 'downloadStorage', 'uses' => 'AppController@downloadStorage'])
->where('path', '.*')->middleware('auth');
我的控制器代码:
public function downloadStorage($path)
{
$user = \Auth::user();
// Here I have some code that verify that user is logged
// and has permissions to download this file
$hasPermission = true;
if ($hasPermission) {
return Storage::download($path); // <-- THIS LINE IS REACHED CORRECTLY
} else {
return abort(403);
}
}
知道如何解决这个问题吗?
我的猜测是,在将文件提供给浏览器之前,新选项卡已关闭(由于return),但我没有找到任何解决方案。
【问题讨论】:
-
你试过return response()->download(storage_path("file path"));
-
确保弹出功能未被阻止
-
@JohnLobo,完全相同的行为
-
邮递员能用吗?
-
@WaleedMuaz,我尝试从 [Chrome 站点设置](chrome://settings/content/popups) 启用弹出窗口,但它不能解决我的问题。无论如何,我正在寻找一种不需要用户更改其本地设置的解决方案。
标签: laravel gmail laravel-storage