LARAVEL - 显示存储文件夹中的图像

时间:2017-04-08 15:55:54

标签: php image laravel upload controllers

我是Laravel的新手,想知道是否有人可以通过简单的图片上传帮助我。

我有一个表单,允许用户在此过程中为其个人资料创建个人资料和上传以及头像。一切都很完美。这是我的控制器的代码:

if (request()->hasFile('avatar')) {

        $file = request()->file('avatar');

        $file->storeAs('avatars/' . auth()->id(), 'avatar.jpg');
    }

图像保存在storage / app / avatars / USER-ID / avatar.jpg

我不确定如何显示此文件夹中的图像。我已经找了解决方案,但我无法使用php artisan storage:link,因为它不是我的服务器。如何在不使用存储链接的情况下解决此问题?我可以手动创建链接吗?

如果有人能向我解释一个完美的解决方案!

只是询问您是否需要任何代码段。

谢谢!

3 个答案:

答案 0 :(得分:3)

您需要使用插入控制器的路径访问受保护的文件,该控制器可以访问文件并将其传递给视图。

我还建议使用可以通过

安装的软件包intervention/image

composer require intervention/image

有关访问图像的信息,请参见下文:

// web.php

中的路线
// Public route to show user avatar
Route::get('avatars/{id}/{image}', [
    'uses'      => 'TheNameOfYourController@userProfileAvatar'
]);

//在您的控制器文件中。在此示例中,根据我们上面的名称,它将是userProfileAvatar()

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Image;

class TheNameOfYourController extends Controller
{

    /**
     * Show user avatar
     *
     * @param $id
     * @param $image
     * @return string
     */
    public function userProfileAvatar($id, $image)
    {
        return Image::make(storage_path() . '/avatars/' . $id . '/' . $image)->response();
    }

}

//您的刀片视图显示图像

<img src="images/profile/{{ \Auth::user()->id }}/avatar.jpg" alt="{{ \Auth::user()->name }}">

以下是一些参考文献,但这些内容更进一步,并在上传时保存数据库的文件路径:

//路线示例

//控制器示例

//查看示例

答案 1 :(得分:1)

如果您无权访问服务器以创建符号链接,则需要创建一个将图像作为响应返回的路由。

类似的东西:

Route::get('storage/{filename}', function ($filename) 
{
   $path = storage_path('avatars/' . $filename);

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

   $file = File::get($path);
   $type = File::mimeType($path);

   $response = Response::make($file, 200);
   $response->header("Content-Type", $type);

   return $response;
});

答案 2 :(得分:0)

创建一个符号链接,该链接将连接storage/apppublic/img目录,例如:

ln -s /home/laravel/public/img /home/laravel/storage/app

然后只需使用asset()帮助程序生成链接:

<img src="{{ asset('img/avatars/'.auth()->id().'/avatar.jpg') }}">