Laravel存储:链接在heroku上不起作用?

时间:2019-03-23 06:51:06

标签: php laravel heroku

所以我一直在玩heroku,我真的很喜欢。它的速度很快,而且效果很好。但是,我的图库应用程序https://miko-gallery.herokuapp.com遇到了问题。创建一个免费帐户,创建一个相册,然后尝试上传照片。它不会显示。我已经运行了php artisan storage:link命令,但是它不起作用。我在这里想念什么?

编辑 我刚刚尝试了新事物,我尝试运行heroku run bash,然后将其CD到storage / app / public文件夹中,但其中不包含应该存在的文件夹images。 / p>

我保存照片的代码在这里(在本地主机上可用):

public function store(Request $request)
{

    $ext = $request->file('items')->getClientOriginalExtension();
    $filename = str_random(32).'.'.$ext;
    $file = $request->file('items');
    $path = Storage::disk('local')->putFileAs('public/images/photos', $file, $filename);

    $photo = new Photo();
    $photo->album_id = $request->album_id;
    $photo->caption = $request->caption;
    $photo->extension = $request->file('items')->getClientOriginalExtension();
    $photo->path = $path.'.'.$photo->extension;
    $photo->mime = $request->file('items')->getMimeType();
    $photo->file_name = $filename;
    $photo->save();

    return response()->json($photo, 200);
}

2 个答案:

答案 0 :(得分:0)

如果您没有ssh访问权限,则只需创建一条路由即可,因此只需点击url即可点击此命令

Route::get('/artisan/storage', function() {
    $command = 'storage:link';
    $result = Artisan::call($command);
    return Artisan::output();
})

首先从存储取消链接现有链接

答案 1 :(得分:0)

Heroku的文件系统is dyno-local and ephemeral。您对它所做的任何更改都将在下次每次dyno重新启动时丢失。这种情况经常发生(at least once per day)。

因此,您不能将上载存储在本地文件系统上。 Heroku的official recommendation将使用Amazon S3之类的东西来存储上传内容。 Laravel supports this开箱即用:

  

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

Simply add league/flysystem-aws-s3-v3 ~1.0 to your dependencies,然后在config/filesystems.php中进行配置。