vue.js 从API返回Blob时显示图像

niwlg2el  于 2023-02-09  发布在  Vue.js
关注(0)|答案(1)|浏览(271)

我正在编写一个Vue应用程序,它使用Microsoft Graph API和SDK进行前端的初始身份验证,然后在整个应用程序中使用API的不同方面,如显示电子邮件、OneDrive文件等。
我正在使用用户Microsoft帐户中的个人资料照片向其他用户显示头像。问题是当我调用{graphApi}/me/photo/$value时,返回的结果是Blob。这是MS Graph中提供的终结点。
我已经彻底阅读了MS Graph文档,梳理了MDN和其他来源,但还没有找到一种方法来将此结果转换为我的标记中的简单图像。
模板标注:

<template>
  <img :src="userPhoto" :alt="user.displayName" />
</template>

设置功能逻辑:

<script setup>
import { client } from "./foobar"
 const userPhoto = ref();

 async function getPhoto(){
  const photo = await client.api("/me/photo/$value").get()
  console.log(photo.value)
  userPhoto.value = photo
 };
</script>

返回结果:{Blob, image:{id: default, size:48x48}}
那么我如何正确地解码或下载Blob以在我的Vue标记中显示图像呢?我已经尝试了createObjectURLFileReader(),但没有任何运气。我确信有一个简单的解决方案,但我没有找到它。感谢帮助。

sz81bmfz

sz81bmfz1#

说明:
1.在下面的代码片段中,您可以看到我传递了先前从Graph中获取的Employee的objectId
1.然后打电话给员工以获取其虚拟形象/DP
1.图形配置文件照片端点返回照片的二进制数据。
1.将该二进制数据转换为data:image/png;base64,<readAsDataURL> URL,例如data:image/png;base64,iVBORw0KGgoAAAANSU...
1.用于<img src="dataUrl"/>

let imageUrl = (await request.get(GRAPH_CONFIG.GRAPH_DP_ENDPT + objectId + "/photos/48x48/\$value", { responseType: 'arraybuffer', validateStatus: (status) => status === 200 || status === 404 }))
     if (imageUrl.status === 200) {
         let reader = new FileReader()
         let blob = new Blob([imageUrl.data], {type: 'image/jpeg'})
         reader.onload = (event) => {
             return event.target?.result.toString();
         }
         reader.readAsDataURL(blob)
     }

相关问题