【问题标题】:Can’t send a file response for the storage folder in Laravel 5.2 on Homestead无法在 Homestead 上的 Laravel 5.2 中发送存储文件夹的文件响应
【发布时间】:2016-06-24 07:23:50
【问题描述】:

我想做的是保护我的私人文件,以便只有其所有者才能访问它们。我将我的公共磁盘更改为存储文件夹:

'orders' => [
    'driver' => 'local',
    'root'   => storage_path('files/orders'),
],

并创建了一个路由控制器,以便能够将文件设为私有(我故意从示例中排除了这个逻辑):

Route::get('files/{slug}', [
    'as'   => 'get.file',
    'uses' => 'FileController@getFile',
]);

class FileController extends Controller
{
    public function getFile($slug)
    {
        // I use spatie/laravel-medialibrary
        // to manage file uploads.
        $media = Media::where('slug', $slug)->first();

        return response()->file($media->getPath());
    }
}

getPath() 是一个 spatie/laravel-medialibrary 方法,它返回文件的正确路径:/home/vagrant/code/project/storage/files/orders/2/b414a7416571145ea9dcf9bda9a845a2.jpg。它清楚地找到了文件,因为我可以使用\Symfony\Component\HttpFoundation\File\File() 来获取文件的数据,比如它们的 mime 类型或大小(也不会得到 404 错误作为响应);当我遵循 http://localhost:3000/files/2RmYR3 路线时,我得到了这个空白的 200 响应——看起来像这样:

一个人在他的最后测试了几乎相同的代码,并且它有效,但他在 Valet 上,所以这可能是一个 Homestead 问题。他还建议这可能是标头的问题,我尝试发送不同的标头(例如内容类型/长度),但没有任何帮助,所以请查看我收到的内容,而无需为响应指定任何标头:

我也试过vagrant destroy,以防万一,但问题仍然存在。无论如何,感谢您的宝贵时间。

【问题讨论】:

  • 你试过response()->download()吗?
  • @user2094178 我做了,它下载了一个文件,它的大小是正确的,但是它坏了,无法查看或打开。

标签: php laravel laravel-5.2 homestead


【解决方案1】:

它自己解决了。我开始从应用程序中剥离片段以了解代码的哪一部分与响应混淆,起初我以为是我的视图作曲家,但不是;我做了一个全新的独立 Laravel 安装,并将 config/app.php 从全新安装复制到我的项目,然后只更新了我之前拥有的提供程序和别名列表,就这样完成了。

我的 app.php 缺少 'log_level' => env('APP_LOG_LEVEL', 'debug'), 在我开始项目后添加到 Laravel 的行,这可能是响应无法正常工作的原因,但我对此表示怀疑。

【讨论】:

    猜你喜欢
    • 2021-12-14
    • 2018-09-10
    • 2016-11-11
    • 2017-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多