Nano Hash - криптовалюты, майнинг, программирование

Публичный URL-адрес Laravel для хранения файлов

Я хочу получить общедоступный URL-адрес для всех файлов, хранящихся с помощью

storage::putFile('общедоступный/запасной');

Итак, это проблема, которую я использую

storage::files('общедоступные/запасные части');

но он предоставляет этот вывод из каталога хранилища laravel

public/spares/image1.jpg
public/spares/image2.jpg
public/spares/image3.jpg

как я могу получить общедоступную ссылку для вышеуказанного

http://localhost/laravel/public/storage/spares/image1.jpg
http://localhost/laravel/public/storage/spares/image2.jpg
http://localhost/laravel/public/storage/spares/image3.jpg

**Редактировать **

Отправка последних измененных данных файлов для просмотра

$docs = File::files('storage/document');
$lastmodified = [];
foreach ($docs as $key => $value) {
   $docs[$key] = asset($value);
   $lastmodified[$key] = File::lastmodified($value);
}
return view('stock.document',compact('docs','lastmodified'));

Это верно


  • Какую версию Laravel вы используете? 04.05.2017
  • Я использую ларавель 5.4 04.05.2017

Ответы:


1

А как насчет Storage::url? Это работает даже для локального хранилища.

Вы можете найти больше здесь: https://laravel.com/docs/5.4/filesystem#file-urls

Если вы хотите вернуть URL-адреса всех файлов из каталога, вы можете сделать что-то вроде этого:

return collect(Storage::files($directory))->map(function($file) {
    return Storage::url($file);
})

Не забудьте ввести \Illuminate\Filesystem\FilesystemManager вместо фасада Storage, если вы ищете нефасадный способ.

Редактировать:

Существует 2 (или более) способа обработки измененной даты:

Передать файлы в представление.

|вы можете передать Storage::files($directory) непосредственно в представление, а затем использовать в своем шаблоне следующее:

// controller:

return view('view', ['files' => Storage::files($directory)]);

// template:

@foreach($files as $file)
   {{ Storage::url($file) }} - {{ $file->lastModified }} // I'm not sure about lastModified property, but you get the point
@endforeach

Вернуть массив:

return collect(Storage::files($directory))->map(function($file) {
     return [
         'file' => Storage::url($file),
         'modified' => $file->lastModified // or something like this
     ]
})->toArray()
04.05.2017
  • он работает для одного файла, не получая массив файлов в папке. 10.05.2017
  • @DanielEuchar, так почему бы не перебрать папку ( Storage::files($directory) - laravel.com/docs/5.4/filesystem #directories), а затем использовать Storage::url для каждого файла и вернуть как коллекцию? Я обновил свой ответ. 10.05.2017
  • никогда не знал, что даст ему пойти и обновить. спасибо 10.05.2017
  • Конечно, разберемся! :) Дайте мне знать, если это работает 10.05.2017
  • здорово, это работает, а теперь, чтобы также прикрепить последние изменения вместе с этими данными, я создаю отдельную переменную или есть возможность использовать коллекции? 12.05.2017
  • Большой! Покажи мне свой код, я не уверен, чего ты хочешь добиться. Вы хотите передать эту коллекцию и информацию о последних изменениях в представление? 13.05.2017
  • извините за задержку ответа, именно то, что вы только что сказали, я добавил код в свой вопрос 16.05.2017
  • Понимать. Я обновил свой ответ, чтобы показать вам пример. 16.05.2017

  • 2

    Сначала вам нужно создать символическую ссылку из вашего каталога public/storage в ваш каталог storage/app/public, чтобы вы могли получить доступ к файлам. Вы можете сделать это с помощью:

    php artisan storage:link
    

    Итак, вы можете хранить свои документы с помощью:

    Storage::putFile('spares', $file);
    

    И получить к ним доступ как к активу с помощью:

    asset('storage/spares/filename.ext');
    

    Ознакомьтесь с документацией на общедоступном диске.

    04.05.2017
  • чего я хотел добиться, так это получить список файлов в каталоге и отобразить его на мой взгляд. Предложенное вами решение работает для одного актива, а не для получения полного списка. 10.05.2017

  • 3

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

    Чтобы решить эту проблему, обновите конфигурацию вашей файловой системы, добавив ключ «url», как показано ниже:

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

    Надеюсь, поможет :)

    26.09.2019

    4

    Ну я понял решение, вместо того, чтобы искать хранилище

    $docs = Storage:files('public/spares');
    

    мы можем искать символическую ссылку

    $docs = File:files('storage/spares');
    

    затем запустите его через функцию asset(), чтобы получить общедоступный URL-адрес. Есть ли лучшее решение?

    04.05.2017
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..