Cosmos DB图像/文件附件

时间:2018-08-14 08:44:34

标签: azure-cosmosdb

我使用以下代码创建了带有pdf附件的文档,并且该文档正在运行(可以检索附件)。

var myDoc = new { id = "42", Name = "Max", City="Aberdeen" }; // this is the 
document you are trying to save
var attachmentStream = File.OpenRead("c:/Path/To/File.pdf"); // this is the 
document stream you are attaching

var client = await GetClientAsync();
var createUrl = UriFactory.CreateDocumentCollectionUri(DatabaseName, 
CollectionName);
Document document = await client.CreateDocumentAsync(createUrl, myDoc);

await client.CreateAttachmentAsync(document.SelfLink, attachmentStream, new 
MediaOptions()
{
    ContentType = "application/pdf", // your application type
    Slug = "78", // this is actually attachment ID
});

我可以直接将文档上传到Blob存储中,并将该Blob URL放入文档中。

有人可以帮助我了解内置附件功能的价值吗?这比blob和其他选项更好吗? cosmos DB在哪里保留附件?

我想了解在哪种情况下我们应该考虑使用此选项(我知道每个帐户2GB的限制)

1 个答案:

答案 0 :(得分:0)

  

任何人都可以帮助我了解内置附件的价值   功能?这比blob和其他选项更好吗?

基于此official doc,您可以得到有关问题的答案。

您可以存储两种类型的数据:

1.binary blob / media

2。存储在远程媒体存储中的媒体的元数据(例如位置,作者等)

此外,附件具有垃圾处理机制,与我认为的Azure Blob存储有所不同。

  

Azure Cosmos DB将确保在所有   未完成的引用被删除。自动运行Azure Cosmos DB   上载新媒体并填充时生成附件   _media指向新添加的媒体。如果您选择存储   您管理的远程Blob存储中的媒体(例如,   OneDrive,Azure存储,DropBox等),您仍然可以使用附件   参考媒体。在这种情况下,您将创建附件   自己并填充其_media属性。

因此,据我了解,如果您的资源数据会频繁添加或删除,我认为您可以考虑使用附件。您只需要将远程URL存储到_media属性中即可。

  

cosmos DB在哪里保留附件?

附件以JSON格式文档存储在collection中,可以使用REST API或任何客户端SDK轻松创建,替换,删除,读取或枚举附件。据我所知,它到目前为止无法在门户网站上显示。

顺便说一句,Azure cosmos db通常比blob存储更昂贵。我认为成本是要考虑的重要因素。有关更多详细信息,您可以参考price doc

希望我对此很清楚。