Microsoft graph api 预览聊天室消息中的图像附件

Microsoft graph api 预览聊天室消息中的图像附件,microsoft-graph-api,microsoft-graph-sdks,microsoft-graph-teams,Microsoft Graph Api,Microsoft Graph Sdks,Microsoft Graph Teams,我们使用ms graph api将消息从内部桌面应用程序发布到团队频道。主要目的是将图像附加到邮件中。我们将图像文件上传到频道的一个驱动器文件夹中,如下所示 var uploadProps=新的DriveItemUploadableProperties { ODataType=null, AdditionalData=新字典 { {“@microsoft.graph.conflictBehavior”,“replace”} } }; var session=wait graphClient.D

我们使用ms graph api将消息从内部桌面应用程序发布到团队频道。主要目的是将图像附加到邮件中。我们将图像文件上传到频道的一个驱动器文件夹中,如下所示


var uploadProps=新的DriveItemUploadableProperties
{
ODataType=null,
AdditionalData=新字典
{
{“@microsoft.graph.conflictBehavior”,“replace”}
}
};
var session=wait graphClient.Drives[driveId]
.Items[parentId].ItemWithPath(文件名).CreateUploadSession(uploadProps).Request().PostAsync(令牌);
int maxSliceSize=320*1024;
var fileUploadTask=
新的LargeFileUploadTask(会话、文件流、maxSliceSize);
//创建一个在上传每个片段后调用的回调
IProgress progress=新进度(reportAsync);
//上传文件
var uploadResult=await fileUploadTask.UploadAsync(进度);
if(uploadResult.UploadSuccessed)
{
返回uploadResult.ItemResponse;
}
然后,我们向频道发送一条消息,并将先前上传的图像作为参考附件附加

var chatMsg=new ChatMessage();
Body=newitembody();
chatMsg.Body.ContentType=BodyType.Html;
chatMsg.Body.Content=msg+“”+string.Join(“,attachments.Select(d=>$”);
chatMsg.Attachments=Attachments.Select(d=>newchatmessageattachment()
{
Id=parseTag(d.ETag),
ContentType=“reference”,
ContentUrl=d.WebUrl,
Name=d.Name
});
返回等待此消息。graphClient.Teams[teamId]。频道[channelId]。消息
.Request()
.AddAsync(chatMsg,令牌);
问题是,该消息只显示附件的名称,而没有在底部消息中看到的预览。在teams应用程序中附加文件时,我们希望看到预览(顶部消息)

我们尝试将附件的thumbnailurl属性设置为从ms graph api获取的缩略图url,但没有成功

我们使用teams应用程序(带预览)上传了一个文件,然后在我们的应用程序(show的无预览)中创建了一条具有相同文件(相同driveitem id)的相同消息。然后,我们使用graph api获取了这两条消息,除了消息id的ofc之外,我们无法识别这两条消息之间的任何差异

我们搜索了这些论坛,微软文档,甚至建议页面,都没有发现任何东西

我们已经能够在引用缩略图URL的邮件正文和MessageCard中分别显示预览,但理想情况下,我们希望预览直接显示在附件中

编辑


缩略图URL似乎在24小时后过期,因此不是一个很好的解决方案。

我们使用添加的
?$expand=thumbnails
查询参数成功地解决了这个问题。我没有尝试过,但是查询参数应该也适用于您正在使用的端点

从上载响应中的中选择一个大小,并将其作为图像标记添加到邮件正文中。见下文:

//为了简洁起见,省略了频道、文件、extractIdFromEtag和消息。
//PUT/groups/{group id}/drive/items/{parent id}:/{filename}:/content
常量上载URL=`https://graph.microsoft.com/beta/groups/${channel.teamId}/drive/items/root://${channel.displayName}/${file.name}:/content?$expand=thumbnails`;
const res=wait this.http.put(uploadUrl,file).toPromise();//供参考使用角度http服务
常量附件={
id:extractIdFromEtag(res.eTag),
contentType:“引用”,
contentUrl:res.webUrl,
名称:res.name,
缩略图URL:res.webUrl
};
常量postBody={
主题:空,
正文:{
contentType:'html',
内容:信息
},
};
//这使得图片显示在消息中,就像是团队发布的一样
postBody.body.content+=`

`; const messageUrl=`https://graph.microsoft.com/beta/teams/${channel.teamId}/channels/${channel.id}/messages`; const result=wait this.http.post(messageUrl,postBody.toPromise(); //完成

如果您希望将原始图像作为文件附加,还可以继续添加附件,并在邮件中显示图像预览。

首先感谢您的回答。这是我们所做的妥协,但url非常长,占用了请求24kb限制的很大一部分,我们还发现url的寿命并不长,它们似乎在大约24小时后过期。我看到你在附件上设置了缩略图url,我们也这样做了,结果没有改变,你注意到设置后有什么变化吗?我昨天确实试着将
附件
对象的
缩略图url
属性设置为
res.thumbnails[0]。large.url
,但效果并没有达到我的预期。api响应大致上是一个神秘的“属性不能为null”,因此我决定继续执行其他任务。不过我不知道过期时间,谢谢你提醒我!