为了账号安全,请及时绑定邮箱和手机立即绑定

Laravel 输出服务器端生成的图像的正确模式是什么?

Laravel 输出服务器端生成的图像的正确模式是什么?

PHP
天涯尽头无女友 2023-08-19 17:33:53
我创建了一条路线,旨在跟踪电子邮件打开情况Route::get('/stats/{token}/pixel-email-read.png',            'StatController@trackEmailRead')       ->name('stats.pixel-email-read');我在电子邮件建设中使用它,如下<img src="{{ route('stats.pixel-email-read', [ 'token' => $order->token ] ) }}">实际代码正在生成 1x1 透明 pingpublic function trackEmailRead(Request $request, string $token)    {        header('Content-Type: image/png');        echo base64_decode('iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8Xw8AAoMBgDTD2qgAAAAASUVORK5CYII=');    }它适用于电子邮件,但不适用于浏览器。如果我打开浏览器我会得到这个我希望看到浏览器以图像形式打开我的链接。我究竟做错了什么?
查看完整描述

2 回答

?
慕虎7371278

TA贡献1802条经验 获得超4个赞

如果通往图像的路由和其他内容正确,请使用response()对象助手并加载 base64 图像,最后附加内容类型。

想法是这样的:

public function trackEmailRead(Request $request, string $token){
    $base64_img = base64_decode('iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8Xw8AAoMBgDTD2qgAAAAASUVORK5CYII=');    
    return response($base64_img)->header('Content-type', 'image/png');
}


查看完整回答
反对 回复 2023-08-19
?
HUH函数

TA贡献1836条经验 获得超4个赞

我将凯文的答案标记为最佳答案,但我添加自己的问题只是为了将来的替代想法。


我提供了一个文件而不是回显,就像 mrhn 的评论所建议的那样


public function trackEmailRead(Request $request, string $token)

{

    $order = Order::where(['token' => $token])->first();

    if ($order && !$order->email_read_at) {

        $order->update([

            'email_read_at' => now()

        ]);

    }

    return response()->file(public_path() . '/images/pixel.png');

}

是的,我知道 !!您认为我可以在 whereNull 条件下使用“email_read_at”进行直接更新,但是......在实际代码中,在查询和 if 之间,还有一些其他业务逻辑......


查看完整回答
反对 回复 2023-08-19
  • 2 回答
  • 0 关注
  • 79 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信