我使用以下配置在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上正确处理用户上传?
答案 0 :(得分:1)
Heroku提供了ephemeral filesystem。它可以用于临时存储,但是当您的测功机重新启动时,保存在其中的所有内容都会丢失。 frequently(每天至少发生一次)。
如果您需要长期存储,请使用Heroku recommends using a third-party service like Amazon S3。 Laravel 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配置了。