【问题标题】:Laravel Storage::download from Gmail url not workingLaravel Storage::从Gmail url下载不起作用
【发布时间】: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


【解决方案1】:

我不确定为什么应用程序无法提供文件以供下载,但我找到了以下解决方案:

而不是为下载提供文件:

return Storage::download($path);

我将其退回,以便在新标签页中打开它:

return \Response::file(Storage::path($path));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 2016-01-17
    • 1970-01-01
    • 2017-08-13
    • 1970-01-01
    相关资源
    最近更新 更多