无法使用Laravel在Heroku上存储文件

时间:2019-02-14 16:59:57

标签: laravel laravel-5 heroku

我使用以下配置在Heroku上部署了一个简单的Laravel(v5.7)应用程序:

filesystems.php

'public' => [
    'driver' => 'local', 
    'root' => storage_path('app/public'), /* app/storage/app/public */
    'url' => env('PUBLIC_STORAGE_URL'), /* http://myApp.herokuapp.com/public/storage */ 
    'visibility' => 'public', 
],

Heroku树:

app
    Procfile
    app
    database
    storage
        app
            public
    public
        storage  /* symlink to /app/storage/app/public */

该应用程序在Heroku上运行正常,但在本地运行良好时我无法将文件上传到公共存储文件夹中。

我正在使用以下代码:

request()->file($userSelectedFile)->store($userFolderName);

生成的示例路径如下:

http://myApp.herokuapp.com/public/storage/userFolderName/kwooAGW0CrChzDbUUhOdSXsoLDI99rd1enPd22ZU.png

但未在app/storage/app/public/中创建文件。

如何在Heroku上正确处理用户上传?

1 个答案:

答案 0 :(得分:1)

Heroku提供了ephemeral filesystem。它可以用于临时存储,但是当您的测功机重新启动时,保存在其中的所有内容都会丢失。 frequently(每天至少发生一次)。

如果您需要长期存储,请使用Heroku recommends using a third-party service like Amazon S3Laravel supports this approach natively

  

由于Frank de Jonge出色的Flysystem PHP软件包,Laravel提供了强大的文件系统抽象。 Laravel Flysystem集成提供了易于使用的驱动程序,用于处理本地文件系统,Amazon S3和Rackspace Cloud Storage。更好的是,在这些存储选项之间切换非常简单,因为每个系统的API都相同。

假设您要使用S3 add league/flysystem-aws-s3-v3 and league/flysystem-cached-adapter to your dependencies,然后相应地更新config/filesystems.php。应该已经有一个样本S3配置了。