繁体   English   中英

如何在 Laravel 刀片模板文件中显示 Blob 图像?

[英]How to display Blob image in Laravel blade template file?

我想显示我的数据库中存储为 blob 图像的图像。 我执行以下操作:

echo '<img src="data:image/JPG;base64,'.base64_encode($item->image).'"/>'; ?>

它给了我错误:

图像无法显示,因为它包含错误

我是这样上传的

$base64 = base64_encode($img);

DB::table('items')->InsertGetId([
        'item'=>$item,
        'des'=>$des,
        'unit_sel'=>$sell,
        'unit'=>$unit,
        'stock'=>$stock,
        'weight'=>$weight,
        'cat'=>$cat,
        'image'=>$base64
    ]);

我使用 Laravel 5.5。 我该如何解决这个问题?

我已经在 Reddit 回复过,但我总结一下 3 点:

  • 您将图像保存到数据库中,除非您知道自己在做什么,并且为了严格的图像控制而不关心可扩展性、资源、性能,否则应该避免这样做。
  • 您在 Blade 模板中使用echo而不是双花括号{{ }} ,这可以允许 Persistent XSS atacks
  • 存储图像时,您已经将图像编码为 base64。 在您的视图代码中,您必须使用已经使用 base64 编码的字符串,而不是再次对其进行编码或解码。

如果您需要将图像存储在数据库中,我建议为图像检索创建单独的路由,因为这样浏览器会缓存图像并避免每次必须显示图像时查询数据库,并加快页面速度图片。

我将图像作为 BLOB 存储在由 product_id 标识的 MYSQL PRODUCT 表中

刀刃:

<img src="/dbimage/{{$product->id}}.png" >

路线:

Route::get('/dbimage/{id}',[ProductImageController::class, 'getImage']);

控制器:

class ProductImageController extends Controller
{

    public function getImage($prodcutImageID){
        $productID=explode(".",$prodcutImageID);
        $rendered_buffer= Product::all()->find($productID[0])->image;

        $response = Response::make($rendered_buffer);
        $response->header('Content-Type', 'image/png');
        $response->header('Cache-Control','max-age=2592000');
        return $response;
    }

}

这使浏览器缓存图像

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM