Ссылка на хранилище Laravel не будет работать на производстве - PullRequest
0 голосов
/ 07 июня 2018

Я использую storage_path для сохранения своих изображений, и я обозначаю свою папку хранения как public_html

php artisan storage:link

На локальном компьютере все работает нормально, когда я загружаю изображение, оно загружается в хранилище.папка и ссылка на нее появятся в папке public, но, поскольку я перешел на рабочий хост и в производственный режим, мои изображения будут загружены в папку хранения, но в моем public_html/storage ничего нет, и я не могу получить их в своем интерфейсе.

Коды

/config/filesystems.php

'public' => [
  'driver' => 'local',
  'root' => storage_path('app/public/'),
  'url' => env('APP_URL').'/storage',
  'visibility' => 'public',
],

.env

FILESYSTEM_DRIVER=public

controller sample

if ($request->hasFile('image')) {
  $image = $request->file('image');
  $filename = 'page' . '-' . time() . '.' . $image->getClientOriginalExtension();
  $location = storage_path('app/public/images/' . $filename);
  Image::make($image)->resize(1200, 600)->save($location);
  if(!empty($page->image)){
    Storage::delete('images/' . $page->image);
  }
  $page->image = $filename;            
}

есть идеи?

Ответы [ 6 ]

0 голосов
/ 02 августа 2019

Вы также можете удалить свое хранилище папок: сначала ссылка, затем открыть терминал в хосте и ввести команду php artisan storage: ссылка.Если ваш хостинг поддерживает символическую ссылку, она будет работать

0 голосов
/ 27 февраля 2019

Я только что столкнулся с этой проблемой, и вот как я ее исправил, без необходимости SSH'-ввода на сервер или запуска CronJob:

Для Laravel 5 + (Havenне тестировался с более низкой версией)

Вы можете использовать метод Artisan::call() внутри вашего маршрута / контроллера для выполнения ремесленных команд без использования терминала.

$exitCode = Artisan::call('storage:link', [] );
echo $exitCode; // 0 exit code for no errors.
0 голосов
/ 10 октября 2018

Решение: как только ваше приложение будет загружено на действующий сервер.Просто проверьте это, если у вас есть какая-либо папка для хранения в публичном каталоге. Проверьте структуру папок

Просто удалите папку хранилища из общего каталога.

[app/public/storage]

После этого из программного обеспечения замазки получите доступ к своей основной папке проекта Laravel и выполните эту команду в режиме реального времени.

Не забудьте настроить файл .env APP_URL = {ваш действующий сервер ip}, а затем приведенная ниже команда.

php artisan storage:link

Это создаст новую ссылку на хранилище в общей папке, связанной с APP_URL .

0 голосов
/ 31 июля 2018

удалить хранилище папок из общего доступа и запустить эту команду в задании Cron [один раз]

ln -s / home / public_html / storage / app / public / home / dev5 / public_html / public / storage

0 голосов
/ 09 июня 2018

решено

Спасибо за вашу помощь , я попытался запустить php artisan storage:link на моем сервере и обнаружил, что мой сервер отключен symlink по соображениям безопасности.

Итак, я изменил все свои функции загрузки изображений, чтобы загружать изображения в мою папку public вместо папки storage, и теперь все работает просто отлично.

0 голосов
/ 07 июня 2018

изменить настройки storage_path с помощью public_path

'public' => [
  'driver' => 'local',
  'root' => public_path('app/public_html/'),
  'url' => env('APP_URL').'/storage',
  'visibility' => 'public',
],

if ($request->hasFile('image')) {
  $image = $request->file('image');
  $filename = 'page' . '-' . time() . '.' . $image->getClientOriginalExtension();
  $location = public_path('app/public_html/images/' . $filename);
  Image::make($image)->resize(1200, 600)->save($location);
  if(!empty($page->image)){
    Storage::delete('images/' . $page->image);
  }
  $page->image = $filename;            
}

, если это не работает, вы можете попробовать:

$path = base_path().'/../public_html/images'; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...