错误图像上传和获取,方法应用\图像::__toString() 不得抛出异常,捕获 Illuminate\Datab



我正在上传正在上传并移动到存储/应用程序/上传/图像文件夹的用户配置文件图像,但是当我尝试显示该图像时,发生了以下给定错误。

Method AppImage::__toString() must not throw an exception, caught IlluminateDatabaseEloquentJsonEncodingException

这是我用于显示的控制器功能

public function userProfile() {   
$image = Image::all();
return view('frontend.layouts.Profile',compact('image'));
}

我在其中显示图像的视图

@foreach($image as $images)
<img style="width:210px ; height: 230px " src="/storage/app/upload/images/{{$images->image}}" >

@endforeach

请在公共目录中上传您的图像,然后尝试访问它,它将正常工作

有三种方法可以使图像可供用户使用:

1. 作为公共资产在这里,图像可供所有人使用。例如,所有人都可以访问您的网站徽标或登录页面图像。 因此,有一个所有人都可以轻松访问的图像 URL。 这些类型的文件将直接进入public/img/文件夹。

2. 作为受保护的图像,仅在请求特定 URL 时可用在这里,用户特定的图像将由特定的人访问。 考虑一下您只想提供给成员本人或某些特定人员的成员的个人照片。 在这种情况下,您将storage/app/public存储图像,并使用 artisan 命令创建符号链接php artisan storage:link您可以在此处阅读更多相关信息。假设您使用 str_random() 使用随机名称存储文件,然后您将使用 asset() 帮助程序生成图像的 URL,如下所示:echo asset('storage/X3jf5j5b2j3n.jpg');鉴于文件名是随机的,除了那些使用 asset() 帮助程序生成 url 的人之外,每个人都很难访问此图像。

3. 作为使用干预库提供的受保护图像 在这种情况下,您将首先检查用户是否已登录,然后通过另一个受保护的路由使用干预动态加载图像。 因此,在您的 Web 路由中,您将首先使用身份验证中间件获得用户授权:

Route::group(['middleware' => 'auth'], function () {
Route::get('user', 'UserController@userProfile');
Route::get('images/{image}', 'UserController@serveImage'); // this route serves the image only if user is logged in
});

然后,一旦您使用作曲家安装了干预库,我们的用户控制器将如下所示:

use Intervention;
class UserController extends Controller
{ 
public function userProfile()
{ 
$images = Image::all();
return view('frontend.layouts.Profile', compact('images'));
}
public function serveImage($image)
{  
$filename = storage_path('app/images/'.$image);
return Intervention::make($filename)->response();
}
}

您可以看到图像现在正在从storage文件夹而不是public文件夹提供。 因此,此方法 serveImage() 仅在之前为其定义的路由获得授权时才被调用。 然后,干预发挥其魔力来读取图像并将其作为http响应发送。

您的视图将稍微更改一点,以适应我们定义的称为images的新路由终点。 我在这里假设您通过一个名为filename的字段将图像的文件名存储在 db 中:

@foreach($images as $image)
<img style="width:210px ; height: 230px " src="{{ url('/images/'.$image->filename) }}" >
@endforeach

注意:请记住,提供图像的首选方法是使用方法 2,因为它要快得多。 如果您真的不希望任何人偶然发现使用 url 的文件,您可以谨慎使用方法 3。

最新更新