【问题标题】:Laravel5 How to access public folder from controllerLaravel5 如何从控制器访问公用文件夹
【发布时间】:2026-01-18 20:20:04
【问题描述】:

我是 Laravel 的新手,但有一些小技巧让我无法理解。

我有一个控制器,我需要在其中列出公共文件夹中的图片(例如:public/images/album/Ecosse),但我不知道如何访问它。 我总是没有目录错误。 你能解释一下它是如何工作的吗?

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Repositories\AlbumsRepository;
use File;

class AlbumController extends Controller
{
    protected $albumsRepository;

    public function __construct(AlbumsRepository $albumsRepository)

    {
        $this->albumsRepository = $albumsRepository;
    }
    public function show($n)
    {
        $album = $this->albumsRepository->getById($n);

        $files1 = File::allFiles(asset('images/albums/'.$album->titre));
        foreach ($files1 as $key => $value)
           {
              if (!in_array($value,array(".","..")))
              {
                 if (is_dir($dir . DIRECTORY_SEPARATOR . $value))
                 {
                    $result[$value] = dirToArray($dir . DIRECTORY_SEPARATOR . $value);
                 }
                 else
                 {
                    $result[] = $value;
                 }
              }
           } 
        return view('album')->with('album', $album);
    }
}

感谢您的帮助。 马克西姆

【问题讨论】:

    标签: image laravel path controller public


    【解决方案1】:

    使用RecursiveDirectoryIterator

    $directory = new RecursiveDirectoryIterator(public_path('images/albums/'.$album->titre));
    $iterator = new RecursiveIteratorIterator($directory);
    foreach ($iterator as $item) {
        // both file and directory will be iterated.
    }
    

    【讨论】:

    • 抱歉回答晚了,但我在本地,也许它改变了一些东西,因为我现在有这个目录:C:\wamp64\www\photo\public\images/albums/Ecosse。也许我需要用 / 替换 \ ?
    • @MaximeBaude 无需手动替换,windows可以识别'\'和'/'目录分隔符。
    【解决方案2】:

    我使用url() 函数从控制器访问我的公用文件夹,例如:

    url('uploads/images/user_image.png');
    

    【讨论】:

      【解决方案3】:

      这可行

      public_path('cow.jpg')

      【讨论】: