首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在blob容器中保存附件- bot框架

在blob容器中保存附件- bot框架
EN

Stack Overflow用户
提问于 2018-04-12 18:22:09
回答 3查看 776关注 0票数 0

我正在使用Azure Storage来记录我的机器人和用户之间的对话。我希望将用户发送的附件存储在Azure Blob容器中。我以这种方式使用ContentUrl属性:

代码语言:javascript
复制
foreach (Attachment item in message.Attachments)
        {
            /// creo una sottodirectory in cui verranno salvate tutte le immagini con quel conversation Id, quindi di quella conversazione
            CloudBlockBlob targetBlob = _alturasbotChatAttachmentBlobsContainer.GetBlockBlobReference("conv#" + message.Conversation.Id.ToLower() + "/" + item.Name);

            /// carico il file dall'url datomi dall'utente
            try
            {
                await targetBlob.StartCopyAsync(new Uri(item.ContentUrl));
            }
            catch (Exception e)
            {
                throw;
            }
        }

问题是,在try-catch中,如果url不是绝对的url,就会抛出一个异常(例如,如果我插入来自google的图像url而不是contentUrl,一切都会正常工作)。也许ContentUrl在这种情况下不可用,因为它是本地地址。有办法解决这个问题吗?我是否必须使用Content属性(如果必须,如何使用?)谢谢

EN

回答 3

Stack Overflow用户

发布于 2018-04-12 18:53:12

部分回答了你的问题(因为我没有使用过Bot框架)。

从本质上讲,复制blob操作要求源项的URL应该是公开可访问的,因为复制操作是异步服务器端操作,并且Azure Storage应该能够在提交复制blob的请求后从源读取。这就是为什么你的代码工作时,你从谷歌的网址,并使用它而不是ContentUrl的附件。

由于我没有使用过Bot框架(因此我纯粹是在猜测),你可以做的一件事就是读取你试图在代码中作为流保存的附件的内容(不确定如何做到这一点),然后使用CloudBlockBlob.UploadFromStream方法上传blob。

票数 2
EN

Stack Overflow用户

发布于 2018-04-12 19:28:33

感谢回复的人。最后,我发现附件的内容是空的,所以我必须使用HttpClient来下载内容,然后我将文件上传到Azure Blob Container。现在它起作用了。对于最好奇的人:

代码语言:javascript
复制
using (HttpClient client = new HttpClient())
                {
                    using (HttpResponseMessage response = await client.GetAsync(item.ContentUrl))
                    using (Stream streamToReadFrom = await response.Content.ReadAsStreamAsync())
                    {
                        await targetBlob.UploadFromStreamAsync(streamToReadFrom);
                    }
                }
票数 1
EN

Stack Overflow用户

发布于 2018-04-12 18:40:12

如果你阅读API参考,它直接告诉你,CloudBlockBlob使用一个绝对URI来做任何事情。

您可以在CloudBlob.StorageUri属性中找到URI

https://docs.microsoft.com/en-gb/dotnet/api/microsoft.windowsazure.storage.blob.cloudblockblob?view=azure-dotnet

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49794068

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档