Поведение метода * UploadedFile * Laravel не соответствует поведению Storage :: url - PullRequest
0 голосов
/ 08 апреля 2020

Итак, у меня есть UploadedFile, который я хочу загрузить на указанный c диск 'local'.

// $storedFilePath == "kml/uploadedfile.xml";
$storedFilePath = $request->file->store("kml", "local");

Файл фактически загружен в хранилище / app / kml / uploadedfile. xml - это ПРАВИЛЬНО, после конфигурации для локального диска:

    'local' => [
        'driver' => 'local',
        'root' => storage_path('app'),
    ],

С другой стороны, мне нужно получить полный URL-путь (относительно проекта root) к этому файлу. Я пытался

 Storage::disk("local")->url($storedFilePath);

Но это заставляет меня /storage/kml/uploadedfile.xml - обратите внимание, что путь не попадает в приложение / папку.

Одна строка в Laravel FilesystemAdapter. php, которая определяет path находится здесь (функция getLocalUrl):

    $path = '/storage/'.$path;

Учитывая тот факт, что $ path начинается с kml /, вполне логично, что он не работает. У меня вопрос, почему. Почему они не соответствуют и как я могу получить полный внутренний (не публичный c) путь?

1 Ответ

0 голосов
/ 08 апреля 2020

Хорошо, на самом деле все было довольно просто, но я думаю, что документация по этому вопросу в Laravel довольно запутанная. Laravel просто ожидает, что у всех будет символическая ссылка из public / storage в storage / app / publi c

Они почему-то даже думают, что каждый, использующий локальный диск и URL-адрес метода, хочет знать publi c url, что всегда верно только для publi c disk.

config / filesystems. php

добавлен 'url'

   'local' => [
        'driver' => 'local',
        'root' => storage_path('app'),
        'url' => storage_path('app')
    ],

Теперь работает правильно

...