潜水阿宝 2023-08-01 18:25 采纳率: 57.1%
浏览 12
已结题

后端响应图片输出流,vue无法显示图片

问题:前端发送axios请求,后端响应图片输出流,前端处理显示图片,后端正常返回图片输出流,但是前端却无法显示,不知道是不是我方式错误
我的思路:src中调用函数,函数内部发送请求,然后将图片的响应输出流作为函数的返回值,img的src接收返回值显示图片,代码如下:

请求:
export function getIcon(iconInfo) {
    return request({
        method: 'post',
        url: apiUrl + 'getImage',
        data: iconInfo,
        responseType: 'blob'
    })
}

  <div>
    <template v-for="item in menuList" :key="item.path">
      <!--      分为两种方式渲染:有子菜单和没有子菜单-->
      <el-sub-menu
          :index="item.path"
          v-if="item.nodeType == 1"
      >
        <template #title>
          <el-icon v-show="item.iconUrl!=null"><img :src="sendIcon(item.iconUrl)" alt="" class="icon_class"/></el-icon>
          <span>{{ item.name }}</span>
        </template>
        <!--        有子菜单的继续遍历(递归)-->
        <menuTree :menuList="item.children"></menuTree>
      </el-sub-menu>
      <!--      没有子菜单-->
      <el-menu-item :index="item.path" v-if="item.nodeType==2">
        <el-icon v-show="item.iconUrl!=null">
          <img :src="sendIcon(item.iconUrl)" alt="" class="icon_class"/>
        </el-icon>
        <span>{{ item.name }}</span>
      </el-menu-item>
    </template>
  </div>
<script>
import {getIcon} from '@/api/home/file/index'
export default ({
  name: 'menuTree',
  props: ['menuList'],
  setup(props) {
    function sendIcon(filePath) {
      // 获取菜单图片路径
      if (filePath != null) {
        let FileInfoVo = {
          //封装请求参数
          filePath: filePath
        }
        //获取图片输出流
        return getIcon(FileInfoVo).then(res => {
          return res.data
        })
      }
    }
    return {
      sendIcon
    };
  }
})
</script>

其中关键代码如下:

<el-icon v-show="item.iconUrl!=null"><img :src="sendIcon(item.iconUrl)" alt="" class="icon_class"/></el-icon>
<img :src="sendIcon(item.iconUrl)" alt="" class="icon_class"/>

function sendIcon(filePath) {
      // 获取菜单图片路径
      if (filePath != null) {
        let FileInfoVo = {
          //封装请求参数
          filePath: filePath
        }
        //获取图片输出流
        return getIcon(FileInfoVo).then(res => {
          return res.data
        })
      }
    }

后端返回结果正常

img

但是图片却无法显示

img

网上说通过Blob来处理

img

我修改后仍然不能显示图片

img

检查元素里面却是一个promise对象

img

奇怪的是我这里输出结果是一个值并非元素里面的是一个promise对象

img

img

  • 写回答

3条回答 默认 最新

  • ZionHH 2023-08-02 09:34
    关注

    控制台看下img src的值是啥

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 8月3日
  • 修改了问题 8月2日
  • 修改了问题 8月2日
  • 创建了问题 8月1日

悬赏问题

  • ¥15 Xsheii7我安装这个文件的时候跳出来另一个文件已锁定文件的无一部分进程无法访问。这个该怎么解决
  • ¥15 unity terrain打包后地形错位,跟建筑不在同一个位置,怎么办
  • ¥15 FileNotFoundError 解决方案
  • ¥15 uniapp实现如下图的图表功能
  • ¥15 u-subsection如何修改相邻两个节点样式
  • ¥30 vs2010开发 WFP(windows filtering platform)
  • ¥15 服务端控制goose报文控制块的发布问题
  • ¥15 学习指导与未来导向啊
  • ¥15 求多普勒频移瞬时表达式
  • ¥15 如果要做一个老年人平板有哪些需求