【问题标题】:Laravel 5.3 local storage pathLaravel 5.3 本地存储路径
【发布时间】:2017-06-28 04:08:46
【问题描述】:

我有带有本地文件系统的 Laravel 5.3。我的 .env 中的 APP_URL 是:

http://localhost/myapp

我将存储链接到公共

php artisan storage:link

我有一张图片:

myapp/storage/app/public/defaults/test/file.png

在数据库中路径是这样保存的:

public/defaults/test/file.png

所以在我的 Blade.php 中,我尝试访问图像

<img src="{{ Storage::url($user->test)}}" width="" alt="">

但是图片没有显示,图片的网址是:

http://localhost/storage/defaults/test/file.png

那么为什么忽略 app_url 呢?即使我将链接更改为:

http://localhost/myapp/storage/defaults/test/file.png

图片没有显示出来。

如何使用 Storage::url 访问 myapp/storage/app/public/defaults/test/file.png 中的图像?

BR

【问题讨论】:

    标签: php laravel laravel-5


    【解决方案1】:

    如果您想访问存储文件夹中的文件,您需要为该链接创建路由

    Route::get('storage/defaults/test/{filename}', function ($filename)
    {
        $imagePath = storage_path() . '/defaults/test/' . $filename;
    
        if(!File::exists($imagePath)) {
            //Not have file do something here
        };
    
        $file = File::get($imagePath);
        $type = File::mimeType($path);
    
        $response = Response::make($file, 200);
        $response->header("Content-Type", $type);
    
        return $response;
    });
    

    现在您可以通过链接访问

    您还有另一种方式,例如将您的图像保存在 [your project]/public/images/ 这样您就可以通过http://localhost/images/file.png 访问您的图像(无需创建路由)

    但我建议您在服务器示例 /data/images 中创建一个新文件夹 并在 apache 中设置 vhost 以允许路径

    Alias /images /var/www/data/images
    
    <Directory /var/www/data/images>
       IndexOptions FancyIndexing FoldersFirst
       Options MultiViews Indexes
       AllowOverride None
       Order allow,deny
       Allow from all
    </Directory>
    

    希望有帮助

    【讨论】:

      【解决方案2】:

      试试这个:

      1) 触发php artisan storage:link 命令(如果您还没有)

      2) 在数据库中,存储相对于 root/public 目录的路径,前缀为 storage

      所以如果你在 root/public/defaults/test/file.png 有图片,那么在数据库中,存储这个路径:storage/defaults/test/file.png

      3) 最后在视图中显示如下:

      <img src="{{ asset($user->test )}}" width="" alt="">
      

      确保 $user->test 具有值 storage/defaults/test/file.png

      3)如果您不想将 storage 前缀存储到数据库中,则存储路径如下:

      defaults/test/file.png

      在视野中:

      <img src="{{ asset('storage/' . $user->test )}}" width="" alt="">
      

      注意: 用 Laravel 5.4 测试过,但很确定它也适用于 Laravel 5.3。


      这是我创建的完整演示,用于说明图像上传和显示:

      https://github.com/xparthx/laravel5.4-image-upload

      【讨论】:

      • 我链接了存储,在我的数据库中是:storage/defaults/test/file.png 物理文件在这里:root/storage/app/public/defaults/test/file.png 我显示像&lt;img src="{{ asset($user-&gt;test )}}" width="" alt=""&gt; 这样的图像一切都很好。但如果我上传一个新文件:'image' =&gt; $r-&gt;image-&gt;store('storage/defaults/test') - 数据库是正确的,但文件保存在这里:root/storage/app/storage/defaults/test/file.png 所以图像不会显示,因为它是在错误的文件夹中。如何更改上传路径而不是数据库路径?或者为什么错了?
      • 尝试像这样上传:'image' => $r->image->store('defaults/test')
      • @blubbering,这是我创建的完整演示,用于说明图像上传和显示:github.com/xparthx/laravel5.4-image-upload
      猜你喜欢
      • 1970-01-01
      • 2021-10-20
      • 1970-01-01
      • 2017-08-06
      • 2017-02-11
      • 2014-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多