Я создаю приложение с помощью Laravel & загружен в VPS с Dokku. Все работает нормально. Приложение хранит изображения в каталоге хранилища, используя локальный «дисковый» драйвер, и использует собственные методы, доступные в Laravel. Из-за изменчивой природы контейнеров мне нужно было настроить постоянное хранилище и выполнить следующее: http://dokku.viewdocs.io/dokku~v0.13.1/advanced-usage/persistent-storage/
Я использую этот код ниже в Laravel для загрузки загруженных пользователями изображений. Это своего рода приложение CMS, поэтому сохранение в том же имени файла, которое мы получаем от пользователя (что-то похожее на WordPress). Вот код:
public function saveToDisk( UploadedFile $file ){
$storage = Storage::disk();
$storageDir = static::storageDir();
$extention = $file->getClientOriginalExtension();
$extensionLength = mb_strlen( $extention );
$filename = substr( $file->getClientOriginalName(), 0, -( $extensionLength > 0 ? $extensionLength + 1 : 0 ) );
$try = 0;
$maxTry = 5;
$suffix = '';
while( $try < $maxTry ){
$expectedFilename = "$filename$suffix.$extention";
$expectedPath = $storageDir['dir'] . '/' . $expectedFilename;
if( !$storage->exists( $expectedPath ) ){
$file->storePubliclyAs( $storageDir['dir'], $expectedFilename );
$storageDir['title'] = "$filename$suffix";
$storageDir['filename'] = $expectedFilename;
return $storageDir;
}
$try++;
$suffix = "-$try";
}
return false;
}
public static function storageDir(){
$today = Carbon::today();
$baseDir = 'public/uploads';
return [
'dir' => "$baseDir/$today->year/$today->month",
'base' => $baseDir,
'year' => $today->year,
'month' => $today->month,
];
}
Файл загружается хорошо, но главная проблема с разрешением. Как указано в ссылке выше, я уже изменил разрешение для каталога загрузки. Но после загрузки файла файл имеет:
-rw-r--r-- 1 herokuishuser herokuishuser 152434 Dec 5 13:22 Ferry_Font5.jpg
А это пятерки 403 Запрещено когда я пытаюсь получить доступ к файлу в браузере.
Но когда я изменил это с chmod 777
это доступно из браузера.
Пожалуйста, помогите мне решить эту проблему, если вам нужна дополнительная информация, просто спросите. Также, пожалуйста, объясните, если я делаю что-то не так.
Задача ещё не решена.
Других решений пока нет …