gpt4 book ai didi

microsoft-graph-api - 在 ChatMessage 中预览图片附件

转载 作者:行者123 更新时间:2023-12-04 13:35:03 24 4
gpt4 key购买 nike

我们正在使用 ms graph api 从内部桌面应用程序向团队 channel 发布消息。主要目的是将图像附加到消息中。我们将图片文件上传到 channel 的一盘文件夹中,如下图。


var uploadProps = new DriveItemUploadableProperties
{
ODataType = null,
AdditionalData = new Dictionary<string, object>
{
{ "@microsoft.graph.conflictBehavior", "replace" }
}
};


var session = await graphClient.Drives[driveId]
.Items[parentId].ItemWithPath(fileName).CreateUploadSession(uploadProps).Request().PostAsync(token);

int maxSliceSize = 320 * 1024;

var fileUploadTask =
new LargeFileUploadTask<DriveItem>(session, fileStream, maxSliceSize);

// Create a callback that is invoked after each slice is uploaded
IProgress<long> progress = new Progress<long>(reportAsync);

// Upload the file
var uploadResult = await fileUploadTask.UploadAsync(progress);

if (uploadResult.UploadSucceeded)
{
return uploadResult.ItemResponse;
}

然后我们向 channel 发送一条消息,并附上之前上传的图片作为引用附件。
var chatMsg = new ChatMessage();

chatMsg.Body = new ItemBody();
chatMsg.Body.ContentType = BodyType.Html;
chatMsg.Body.Content = msg + " " + string.Join(" ", attachments.Select(d => $"<attachment id=\"{parseEtag(d.ETag)}\"></attachment>"));

chatMsg.Attachments = attachments.Select(d => new ChatMessageAttachment()
{
Id = parseEtag(d.ETag),
ContentType = "reference",
ContentUrl = d.WebUrl,
Name = d.Name
});

return await this.graphClient.Teams[teamId].Channels[channelId].Messages
.Request()
.AddAsync(chatMsg, token);
问题是该消息只显示了附件的名称,而没有在底部的消息中看到的预览。我们希望在团队应用程序中附加文件时显示预览(顶部消息)。
Imgur
我们尝试将附件的缩略图 url 属性设置为从 ms-graph api 获取的缩略图 url,但没有成功。
我们已经使用团队应用程序(带预览)上传了一个文件,然后在我们的应用程序中使用相同的文件(相同的驱动器项 ID)创建了一条相同的消息(显示没有预览)。然后我们使用图形 api 获取了两条消息,除了消息 id 的 ofc 之外,无法辨别两者之间的任何差异。
我们搜索了这些论坛、ms 文档甚至建议页面,但一无所获。
我们已经能够在引用缩略图 URL 的消息正文和消息卡中分别显示预览,但理想情况下,我们希望直接在附件中进行预览。
编辑
缩略图 url 似乎在 24 小时后过期,因此不是一个很好的解决方案。

最佳答案

我们设法使用 Simple Upload Api 解决了这个问题。 ,加上 ?$expand=thumbnails查询参数。我还没有尝试过,但查询参数也应该适用于您正在使用的端点。
ThumbnailSet 中选择尺寸在上传响应中,并将其作为图像标签添加到您的消息正文中。见下文:

// channel, file, extractIdFromEtag, message omitted for brevity.

// PUT /groups/{group-id}/drive/items/{parent-id}:/{filename}:/content
const uploadUrl = `https://graph.microsoft.com/beta/groups/${channel.teamId}/drive/items/root:/${channel.displayName}/${file.name}:/content?$expand=thumbnails`;
const res = await this.http.put(uploadUrl, file).toPromise(); // FYI Using Angular http service

const attachment = {
id: extractIdFromEtag(res.eTag),
contentType: 'reference',
contentUrl: res.webUrl,
name: res.name,
thumbnailUrl: res.webUrl
};

const postBody = {
subject: null,
body: {
contentType: 'html',
content: message
},
};
// This is what makes the image show in the message as if posted from teams
postBody.body.content += `<br><br><img src="${res.thumbnails[0].large.url}" alt="${res.name}"/>`;

const messageUrl = `https://graph.microsoft.com/beta/teams/${channel.teamId}/channels/${channel.id}/messages`;
const result = await this.http.post(messageUrl, postBody).toPromise();
// Done
如果您希望将原始图像作为文件附加,以及在消息中显示图像预览,您也可以像之前一样继续添加附件。

关于microsoft-graph-api - 在 ChatMessage 中预览图片附件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62650974/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com