Хранилище Laravel 6 приводит к ошибке 404 при попытке извлечь файлы

Хранилище Laravel 6 приводит к ошибке 404 при попытке извлечь файлы

15.11.2019 10:19:19 Просмотров 51 Источник

Я попытался настроить сценарий загрузки в Laravel и следовал инструкциям в документах. Я создал символическую ссылку с помощью сценария Laravel, и она выглядит следующим образом

хранилище -> /Пользователи/Имя пользователя/сайты/переключателя/хранения/приложения/общественные

Проблема возникает, когда я иду, чтобы загрузить изображение, а затем получить результат url-адреса изображения в ответ. Как вы можете видеть, чтобы соответствовать символической ссылке, я установил папку как общедоступную ниже.

$path = $request->file('manufacturer_image_name')->store('public');
echo asset($path);

и это возвращает

http://127.0.0.1:8000/public/XxIX7L75cLZ7cf2xzejc3E6STrcjfeeu3AQcSKz1.формат PNG

проблема в том, что это не работает и бросает 404, но если я вручную изменю url-адрес с "public" на "storage", он найдет изображение.

http://127.0.0.1:8000/storage/XxIX7L75cLZ7cf2xzejc3E6STrcjfeeu3AQcSKz1.формат PNG

Не стоит

Эхо активов($путь);

возвращение URL-адрес, содержащий вместо государственного?

У вопроса есть решение - Посмотреть?

https://stackoverflow.com/questions/58883366/laravel-6-storage-results-in-a-404-error-when-trying-to-fetch-files#comment104034220_58883366
В приведенном выше примере Path возвращает 127.0.0.1:8000/общественных/…
https://stackoverflow.com/questions/58883366/laravel-6-storage-results-in-a-404-error-when-trying-to-fetch-files#comment104034310_58883366
Это возвращает public/XxIX7L75cLZ7cf2xzejc3E6STrcjfeeu3aqcskz1.формат PNG
https://stackoverflow.com/questions/58883366/laravel-6-storage-results-in-a-404-error-when-trying-to-fetch-files#comment104034372_58883366
Im, используя настройки по умолчанию 'общественных' => [ 'водитель' => 'местных', 'корень' => storage_path('приложение/публичную'), 'адрес' => ОКР('APP_URL').'хранения', 'видимость' => 'общественных', ],
https://stackoverflow.com/questions/58883366/laravel-6-storage-results-in-a-404-error-when-trying-to-fetch-files#comment104034428_58883366
да не трогали эти настройки

Ответы - Хранилище Laravel 6 приводит к ошибке 404 при попытке извлечь файлы / Laravel 6 Storage results in a 404 error when trying to fetch files

Alec Joy

15.11.2019 10:43:48

assett($path)предназначен для создания URL-адреса для активов, которые находятся только в общей папке, таких как файлы CSS и JS, созданные Mix. Если вы используете хранилище Laravel для сохранения файла, вы также должны использовать хранилище Laravel для создания URL-адреса файла.

Storage::url('file.jpg');
https://stackoverflow.com/questions/58883366/laravel-6-storage-results-in-a-404-error-when-trying-to-fetch-files/58883673#comment104037692_58883673
если бы они использовали publicдиск, это было бы лучше, но локальный диск не генерирует URL-адреса
Mehedi Hassan

15.11.2019 10:59:23

Ну, есть много способов сделать это, выбрать кого-то, кто подходит вам лучше всего.

// using storage_path helper
storage_path('public/' . $filename);

// you could make a double-check with File::exist() method
$path = storage_path('public/' . $filename);

if (!File::exists($path)) {
   abort(404);
}

// using asset helper
asset('storage/your_folder/image.png');

// using url helper
url('storage/your_folder/image.png');

// using Storage facade
Storage::url($photoLink)
ORStudios

15.11.2019 11:04:05

Спасибо за помощь, я обнаружил, что этот ответ подходит почти идеально, что мне нужно. Laravel: хранение не помещает файл в общую папку

Это было то, с чем я закончил.

if($request->file('manufacturer_image_name')){

                $path = Storage::disk('public')->put('logo', $request->file('manufacturer_image_name'));

                echo $path;

                }

теперь $Path возвращает "логотипом/именем.ext "вместо" public/ or storage/", поэтому я могу хранить это непосредственно в БД.

https://stackoverflow.com/questions/58883366/laravel-6-storage-results-in-a-404-error-when-trying-to-fetch-files/58883933#comment104035205_58883933
просто из любопытства, в вашем первоначальном вопросе мы сказали, что вручную меняем public на storage. Просто хотел подтвердить, это только хранилище или хранилище / public, 127.0.0.1: 8000 / storage/X .. Или 127.0.0.1: 8000 / storage / public / X .. это сработало для тебя?
https://stackoverflow.com/questions/58883366/laravel-6-storage-results-in-a-404-error-when-trying-to-fetch-files/58883933#comment104035870_58883933
это потому, что вы говорили файлу храниться в папке с именем publicот корня диска (локальный диск), поэтому он возвращает вам точный путь от корня диска: public/xxxxxxxxxxx
https://stackoverflow.com/questions/58883366/laravel-6-storage-results-in-a-404-error-when-trying-to-fetch-files/58883933#comment104036072_58883933
Первоначально я обнаружил, что если бы я просто изменил 127.0.0.1:8000/public/... на 127.0.0.1:8000/storage/... это сработало бы.
fahim152

15.11.2019 11:07:21

Вот самая простая и точная вещь для вашего вопроса


            if(!empty($request->file('manufacturer_image_name'))){
                $path = storage_path('public/image/');

                $image_path = Storage::disk('public')->put('manufacturer_image_name', $request->file('manufacturer_image_name'));

                //Assuming you have a model called Manufacturer and created $manufacturer = new Manufacturer()  
               $manufacturer->manufacturer_image_name = isset($image_path) ?  "storage/".$image_path : "";
            }


https://stackoverflow.com/questions/58883366/laravel-6-storage-results-in-a-404-error-when-trying-to-fetch-files/58883976#comment104035340_58883976
там нет необходимости вручную создавать каталоги и даже если вы должны вы никогда не должны давать 777 разрешение на каталоги
https://stackoverflow.com/questions/58883366/laravel-6-storage-results-in-a-404-error-when-trying-to-fetch-files/58883976#comment104041265_58883976
да значит отредактированный. :)
Закрыть X