美文网首页
后端返回图片问题(PHP Laravel)

后端返回图片问题(PHP Laravel)

作者: a9b854aded01 | 来源:发表于2019-08-13 15:25 被阅读0次

以PHP为栗子,下午返回头像图片时遇到的一个问题,折腾了一段时间在同事帮助下解决了,感觉自己犯错挺蠢的也是这里不太熟悉,所以记录一下希望也能帮助到别人。

首先来看个栗子

var m = new Image()
undefined
m.src = 'http://127.0.0.1:8000/image/avatar/3_small.jpg'
"http://127.0.0.1:8000/image/avatar/3_small.jpg"
m.src='http://inte-service.static.chanjet.com/avatars/000/00/00/20190809015513.jpg'
"http://xxxxxxxxxxxxx.com/avatars/000/00/00/20190809015513.jpg"

有两个图片的URL,一个是通过本地图片的路径,一个是图片服务器的url路径,而第一张图片时无法下载图片的,而第二张是可以下载的,主要的差别在于


image.png
image.png

本地如果Response没有做处理的话是以text字符串来处理的不会以图片流形式下载的,而图片服务器返回的是图片流的格式。

而我遇到的是在Laravel框架在通过路由返回的问题 看下代码

 <img class="user-head" alt="{{ $hotArticle->user->name }}" src="{{ get_user_avatar($hotArticle->user_id,'small') }}">

通过一个方法调用路由
if(! function_exists('get_user_avatar')){
    function get_user_avatar($user_id,$size='middle',$extension='jpg'){

        return route('website.image.avatar',['avatar_name'=>$user_id.'_'.$size.'.'.$extension]);
//        return route('website.image.avatar',['avatar_name'=>$user_id]);
    }
}
Controller方法
   $avatar = User::find($avatar_name);

        if($avatar) {

            return $avatar['avatar'];
        }else {
            return 404;
        }

这样子是错误的,因为通过路由请求最后返回的response 是带Content-Type的,及时url是资源服务器也是以text/html,不会下载
正确的方法:

 $avatar = User::find($avatar_name);

        if($avatar) {
            $image =   Image::make($avatar['avatar']);

            $response = response()->make($image->encode('jpg'));
            $response->header('Content-Type', 'image/jpeg');
            return $response;
        }else {
            return 404;
        }

相关文章

网友评论

      本文标题:后端返回图片问题(PHP Laravel)

      本文链接:https://www.haomeiwen.com/subject/fkxbjctx.html