从数据库laravel检索和显示二进制图像

时间:2020-02-23 08:37:24

标签: php database laravel

我试图通过控制器返回数据库中每一行的图像

public function getEmotions() {    

        $emotionsList = Emotions::all();

        $images = DB::table('emotions')->select('image')->get();

        return $images;

    }

这将返回错误的UTF-8格式错误的字符,可能编码错误

我已经尝试过此方法

public function getEmotions() {    

        $emotionsList = Emotions::all();

        $images = DB::table('emotions')->select('image')->get();

        return utf8_encode($images);

    }

但是这将返回错误方法Illuminate \ Support \ Collection :: __ toString()必须返回字符串值

我现在是一个人,但是一直坚持下去,谁能看到我要去哪里错了?

此数据也被传递到Vue文件,我要从中显示图像。我可以将其添加为{{motion.image}}吗?

<label v-for="emotion in emotions" class="cb-container">{{ emotion.em_name }}                      
    <input name="emotions[]" type="checkbox" :value="emotion.id">
    <span class="checkmark"></span>
</label>

2 个答案:

答案 0 :(得分:1)

$ images = DB :: table('emotions')-> select('image')-> get();

Laravel提供的get()方法返回 Illuminate\Support\Collection类的实例。

根据定义

Illuminate \ Support \ Collection类提供了流畅,便捷的 包装器,用于处理数组数据。

Documentation

重点是:您需要像分别遍历$ images var和utf8_encode的每一行一样

foreach($images as $image) {
 ...
}

修改

您可以使用

public function getEmotions() {    

   $emotionsList = Emotions::all();

   foreach($emotionsList as $emotion) {
      $emotion->image = 'data:image/jpeg;base64,' . base64_encode( $emotion->image);
   }

   return $emotionsList;
}

用法

... v-for="emotion in emotions" ...
      <img src="$emotion->image"/>

答案 1 :(得分:0)

您必须返回响应:

return response($images->toArray());

或者如果您希望将其编码为json:

return response()->json($images);