Хранение Laravel: ссылка на геройку не работает? - PullRequest
0 голосов
/ 23 марта 2019

Так что я играл с герою и мне это очень нравится. это быстро и просто работает. Однако я столкнулся с проблемой в приложении для галереи: https://miko -gallery.herokuapp.com . Создайте бесплатную учетную запись, создайте альбом и попробуйте загрузить фотографию. Это не будет отображаться. Я выполнил команду php artisan storage:link, но она не работает. Что мне здесь не хватает?

EDIT Я только что попробовал новую вещь, я попытался запустить heroku run bash, и я перешел в папку storage / app / public, и она не содержит папку images, которая должна была там быть.

Мой код для сохранения фотографии здесь (работает на localhost):

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 голосов
/ 23 марта 2019

Файловая система Heroku является дино-локальной и эфемерной . Любые изменения, которые вы вносите в него, будут потеряны при следующем перезапуске каждого динамометра. Это часто случается ( хотя бы раз в день ).

В результате вы не можете хранить загрузки в локальной файловой системе. Официальная рекомендация Heroku - использовать что-то вроде Amazon S3 для хранения загрузок. Laravel поддерживает это из коробки:

Laravel обеспечивает мощную абстракцию файловой системы благодаря замечательному PHP-пакету Flysystem Фрэнка де Йонге. Интеграция Laravel Flysystem предоставляет простые в использовании драйверы для работы с локальными файловыми системами, Amazon S3 и Rackspace Cloud Storage. Более того, удивительно просто переключаться между этими параметрами хранения, поскольку API остается одинаковым для каждой системы.

Просто добавьте league/flysystem-aws-s3-v3 ~1.0 к вашим зависимостям и затем настройте его в config/filesystems.php.

0 голосов
/ 23 марта 2019

если у вас нет доступа по ssh, просто создайте маршрут. Так что вы можете нажать эту команду, просто нажав url

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

, чтобы сначала отсоединить существующую ссылку от хранилища

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...